From e6770151013dffccb82288a60afd3920f2cf60ad Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Tue, 11 Apr 2023 20:49:06 +0000 Subject: [PATCH 1/3] feat: released securitycenter/v1 SHA custom modules cloud libraries: Create, Get, List, Update, Delete The Security Health Analytics (SHA) custom modules API is now released for general availability track. Create, Get, GetEffective, List, ListEffective, ListDescendant, Update, and Delete are available in the cloud client library. PiperOrigin-RevId: 523462834 Source-Link: https://github.com/googleapis/googleapis/commit/b7b3dfd5a4f83a22b91b1954d44fef17b2eff8a6 Source-Link: https://github.com/googleapis/googleapis-gen/commit/9b679ec02a7e16df9f0e7f66e077e379efd25ad4 Copy-Tag: eyJwIjoiLmdpdGh1Yi8uT3dsQm90LnlhbWwiLCJoIjoiOWI2NzllYzAyYTdlMTZkZjlmMGU3ZjY2ZTA3N2UzNzllZmQyNWFkNCJ9 --- owl-bot-staging/v1/.coveragerc | 13 + owl-bot-staging/v1/.flake8 | 33 + owl-bot-staging/v1/MANIFEST.in | 2 + owl-bot-staging/v1/README.rst | 49 + owl-bot-staging/v1/docs/conf.py | 376 + owl-bot-staging/v1/docs/index.rst | 7 + .../securitycenter_v1/security_center.rst | 10 + .../v1/docs/securitycenter_v1/services.rst | 6 + .../v1/docs/securitycenter_v1/types.rst | 6 + .../google/cloud/securitycenter/__init__.py | 215 + .../cloud/securitycenter/gapic_version.py | 16 + .../v1/google/cloud/securitycenter/py.typed | 2 + .../cloud/securitycenter_v1/__init__.py | 216 + .../securitycenter_v1/gapic_metadata.json | 688 + .../cloud/securitycenter_v1/gapic_version.py | 16 + .../google/cloud/securitycenter_v1/py.typed | 2 + .../securitycenter_v1/services/__init__.py | 15 + .../services/security_center/__init__.py | 22 + .../services/security_center/async_client.py | 5701 ++++ .../services/security_center/client.py | 5894 ++++ .../services/security_center/pagers.py | 1355 + .../security_center/transports/__init__.py | 38 + .../security_center/transports/base.py | 925 + .../security_center/transports/grpc.py | 1555 + .../transports/grpc_asyncio.py | 1554 + .../security_center/transports/rest.py | 6237 ++++ .../cloud/securitycenter_v1/types/__init__.py | 272 + .../cloud/securitycenter_v1/types/access.py | 190 + .../cloud/securitycenter_v1/types/asset.py | 227 + .../types/bigquery_export.py | 135 + .../securitycenter_v1/types/compliance.py | 60 + .../securitycenter_v1/types/connection.py | 97 + .../types/contact_details.py | 61 + .../securitycenter_v1/types/container.py | 72 + .../cloud/securitycenter_v1/types/database.py | 83 + ...security_health_analytics_custom_module.py | 104 + .../securitycenter_v1/types/exfiltration.py | 89 + .../types/external_system.py | 81 + .../cloud/securitycenter_v1/types/file.py | 84 + .../cloud/securitycenter_v1/types/finding.py | 542 + .../cloud/securitycenter_v1/types/folder.py | 54 + .../securitycenter_v1/types/iam_binding.py | 76 + .../securitycenter_v1/types/indicator.py | 164 + .../securitycenter_v1/types/kernel_rootkit.py | 108 + .../securitycenter_v1/types/kubernetes.py | 338 + .../cloud/securitycenter_v1/types/label.py | 53 + .../securitycenter_v1/types/mitre_attack.py | 252 + .../securitycenter_v1/types/mute_config.py | 120 + .../types/notification_config.py | 127 + .../types/notification_message.py | 70 + .../types/organization_settings.py | 123 + .../cloud/securitycenter_v1/types/process.py | 135 + .../cloud/securitycenter_v1/types/resource.py | 96 + .../types/run_asset_discovery_response.py | 76 + ...security_health_analytics_custom_config.py | 173 + ...security_health_analytics_custom_module.py | 137 + .../securitycenter_v1/types/security_marks.py | 80 + .../types/securitycenter_service.py | 2456 ++ .../cloud/securitycenter_v1/types/source.py | 87 + .../securitycenter_v1/types/vulnerability.py | 353 + owl-bot-staging/v1/mypy.ini | 3 + owl-bot-staging/v1/noxfile.py | 184 + ...ecurity_center_bulk_mute_findings_async.py | 56 + ...security_center_bulk_mute_findings_sync.py | 56 + ...ty_center_create_big_query_export_async.py | 53 + ...ity_center_create_big_query_export_sync.py | 53 + ...ed_security_center_create_finding_async.py | 53 + ...ted_security_center_create_finding_sync.py | 53 + ...ecurity_center_create_mute_config_async.py | 57 + ...security_center_create_mute_config_sync.py | 57 + ...center_create_notification_config_async.py | 53 + ..._center_create_notification_config_sync.py | 53 + ...ty_health_analytics_custom_module_async.py | 52 + ...ity_health_analytics_custom_module_sync.py | 52 + ...ted_security_center_create_source_async.py | 52 + ...ated_security_center_create_source_sync.py | 52 + ...ty_center_delete_big_query_export_async.py | 50 + ...ity_center_delete_big_query_export_sync.py | 50 + ...ecurity_center_delete_mute_config_async.py | 50 + ...security_center_delete_mute_config_sync.py | 50 + ...center_delete_notification_config_async.py | 50 + ..._center_delete_notification_config_sync.py | 50 + ...ty_health_analytics_custom_module_async.py | 50 + ...ity_health_analytics_custom_module_sync.py | 50 + ...urity_center_get_big_query_export_async.py | 52 + ...curity_center_get_big_query_export_sync.py | 52 + ...ty_health_analytics_custom_module_async.py | 52 + ...ity_health_analytics_custom_module_sync.py | 52 + ...ed_security_center_get_iam_policy_async.py | 53 + ...ted_security_center_get_iam_policy_sync.py | 53 + ...d_security_center_get_mute_config_async.py | 52 + ...ed_security_center_get_mute_config_sync.py | 52 + ...ty_center_get_notification_config_async.py | 52 + ...ity_center_get_notification_config_sync.py | 52 + ..._center_get_organization_settings_async.py | 52 + ...y_center_get_organization_settings_sync.py | 52 + ...ty_health_analytics_custom_module_async.py | 52 + ...ity_health_analytics_custom_module_sync.py | 52 + ...erated_security_center_get_source_async.py | 52 + ...nerated_security_center_get_source_sync.py | 52 + ...ated_security_center_group_assets_async.py | 54 + ...rated_security_center_group_assets_sync.py | 54 + ...ed_security_center_group_findings_async.py | 54 + ...ted_security_center_group_findings_sync.py | 54 + ...rated_security_center_list_assets_async.py | 53 + ...erated_security_center_list_assets_sync.py | 53 + ...ity_center_list_big_query_exports_async.py | 53 + ...rity_center_list_big_query_exports_sync.py | 53 + ...y_health_analytics_custom_modules_async.py | 53 + ...ty_health_analytics_custom_modules_sync.py | 53 + ...y_health_analytics_custom_modules_async.py | 53 + ...ty_health_analytics_custom_modules_sync.py | 53 + ...ted_security_center_list_findings_async.py | 53 + ...ated_security_center_list_findings_sync.py | 53 + ...security_center_list_mute_configs_async.py | 53 + ..._security_center_list_mute_configs_sync.py | 53 + ..._center_list_notification_configs_async.py | 53 + ...y_center_list_notification_configs_sync.py | 53 + ...y_health_analytics_custom_modules_async.py | 53 + ...ty_health_analytics_custom_modules_sync.py | 53 + ...ated_security_center_list_sources_async.py | 53 + ...rated_security_center_list_sources_sync.py | 53 + ...curity_center_run_asset_discovery_async.py | 56 + ...ecurity_center_run_asset_discovery_sync.py | 56 + ...security_center_set_finding_state_async.py | 53 + ..._security_center_set_finding_state_sync.py | 53 + ...ed_security_center_set_iam_policy_async.py | 53 + ...ted_security_center_set_iam_policy_sync.py | 53 + ...enerated_security_center_set_mute_async.py | 53 + ...generated_security_center_set_mute_sync.py | 53 + ...urity_center_test_iam_permissions_async.py | 54 + ...curity_center_test_iam_permissions_sync.py | 54 + ...ty_center_update_big_query_export_async.py | 51 + ...ity_center_update_big_query_export_sync.py | 51 + ...ity_center_update_external_system_async.py | 51 + ...rity_center_update_external_system_sync.py | 51 + ...ed_security_center_update_finding_async.py | 51 + ...ted_security_center_update_finding_sync.py | 51 + ...ecurity_center_update_mute_config_async.py | 55 + ...security_center_update_mute_config_sync.py | 55 + ...center_update_notification_config_async.py | 51 + ..._center_update_notification_config_sync.py | 51 + ...nter_update_organization_settings_async.py | 51 + ...enter_update_organization_settings_sync.py | 51 + ...ty_health_analytics_custom_module_async.py | 51 + ...ity_health_analytics_custom_module_sync.py | 51 + ...rity_center_update_security_marks_async.py | 51 + ...urity_center_update_security_marks_sync.py | 51 + ...ted_security_center_update_source_async.py | 51 + ...ated_security_center_update_source_sync.py | 51 + ...tadata_google.cloud.securitycenter.v1.json | 7211 +++++ .../fixup_securitycenter_v1_keywords.py | 219 + owl-bot-staging/v1/setup.py | 91 + .../v1/testing/constraints-3.10.txt | 7 + .../v1/testing/constraints-3.11.txt | 7 + .../v1/testing/constraints-3.12.txt | 7 + .../v1/testing/constraints-3.7.txt | 10 + .../v1/testing/constraints-3.8.txt | 7 + .../v1/testing/constraints-3.9.txt | 7 + owl-bot-staging/v1/tests/__init__.py | 16 + owl-bot-staging/v1/tests/unit/__init__.py | 16 + .../v1/tests/unit/gapic/__init__.py | 16 + .../unit/gapic/securitycenter_v1/__init__.py | 16 + .../securitycenter_v1/test_security_center.py | 26225 ++++++++++++++++ owl-bot-staging/v1beta1/.coveragerc | 13 + owl-bot-staging/v1beta1/.flake8 | 33 + owl-bot-staging/v1beta1/MANIFEST.in | 2 + owl-bot-staging/v1beta1/README.rst | 49 + owl-bot-staging/v1beta1/docs/conf.py | 376 + owl-bot-staging/v1beta1/docs/index.rst | 7 + .../security_center.rst | 10 + .../docs/securitycenter_v1beta1/services.rst | 6 + .../docs/securitycenter_v1beta1/types.rst | 6 + .../google/cloud/securitycenter/__init__.py | 81 + .../cloud/securitycenter/gapic_version.py | 16 + .../google/cloud/securitycenter/py.typed | 2 + .../cloud/securitycenter_v1beta1/__init__.py | 82 + .../gapic_metadata.json | 298 + .../securitycenter_v1beta1/gapic_version.py | 16 + .../cloud/securitycenter_v1beta1/py.typed | 2 + .../services/__init__.py | 15 + .../services/security_center/__init__.py | 22 + .../services/security_center/async_client.py | 2406 ++ .../services/security_center/client.py | 2585 ++ .../services/security_center/pagers.py | 625 + .../security_center/transports/__init__.py | 38 + .../security_center/transports/base.py | 465 + .../security_center/transports/grpc.py | 754 + .../transports/grpc_asyncio.py | 753 + .../security_center/transports/rest.py | 2570 ++ .../securitycenter_v1beta1/types/__init__.py | 86 + .../securitycenter_v1beta1/types/asset.py | 155 + .../securitycenter_v1beta1/types/finding.py | 164 + .../types/organization_settings.py | 115 + .../types/run_asset_discovery_response.py | 76 + .../types/security_marks.py | 68 + .../types/securitycenter_service.py | 1053 + .../securitycenter_v1beta1/types/source.py | 76 + owl-bot-staging/v1beta1/mypy.ini | 3 + owl-bot-staging/v1beta1/noxfile.py | 184 + ...ed_security_center_create_finding_async.py | 53 + ...ted_security_center_create_finding_sync.py | 53 + ...ted_security_center_create_source_async.py | 52 + ...ated_security_center_create_source_sync.py | 52 + ...ed_security_center_get_iam_policy_async.py | 53 + ...ted_security_center_get_iam_policy_sync.py | 53 + ..._center_get_organization_settings_async.py | 52 + ...y_center_get_organization_settings_sync.py | 52 + ...erated_security_center_get_source_async.py | 52 + ...nerated_security_center_get_source_sync.py | 52 + ...ated_security_center_group_assets_async.py | 54 + ...rated_security_center_group_assets_sync.py | 54 + ...ed_security_center_group_findings_async.py | 54 + ...ted_security_center_group_findings_sync.py | 54 + ...rated_security_center_list_assets_async.py | 53 + ...erated_security_center_list_assets_sync.py | 53 + ...ted_security_center_list_findings_async.py | 53 + ...ated_security_center_list_findings_sync.py | 53 + ...ated_security_center_list_sources_async.py | 53 + ...rated_security_center_list_sources_sync.py | 53 + ...curity_center_run_asset_discovery_async.py | 56 + ...ecurity_center_run_asset_discovery_sync.py | 56 + ...security_center_set_finding_state_async.py | 53 + ..._security_center_set_finding_state_sync.py | 53 + ...ed_security_center_set_iam_policy_async.py | 53 + ...ted_security_center_set_iam_policy_sync.py | 53 + ...urity_center_test_iam_permissions_async.py | 54 + ...curity_center_test_iam_permissions_sync.py | 54 + ...ed_security_center_update_finding_async.py | 51 + ...ted_security_center_update_finding_sync.py | 51 + ...nter_update_organization_settings_async.py | 51 + ...enter_update_organization_settings_sync.py | 51 + ...rity_center_update_security_marks_async.py | 51 + ...urity_center_update_security_marks_sync.py | 51 + ...ted_security_center_update_source_async.py | 51 + ...ated_security_center_update_source_sync.py | 51 + ...a_google.cloud.securitycenter.v1beta1.json | 2945 ++ .../fixup_securitycenter_v1beta1_keywords.py | 193 + owl-bot-staging/v1beta1/setup.py | 91 + .../v1beta1/testing/constraints-3.10.txt | 7 + .../v1beta1/testing/constraints-3.11.txt | 7 + .../v1beta1/testing/constraints-3.12.txt | 7 + .../v1beta1/testing/constraints-3.7.txt | 10 + .../v1beta1/testing/constraints-3.8.txt | 7 + .../v1beta1/testing/constraints-3.9.txt | 7 + owl-bot-staging/v1beta1/tests/__init__.py | 16 + .../v1beta1/tests/unit/__init__.py | 16 + .../v1beta1/tests/unit/gapic/__init__.py | 16 + .../gapic/securitycenter_v1beta1/__init__.py | 16 + .../test_security_center.py | 10951 +++++++ owl-bot-staging/v1p1beta1/.coveragerc | 13 + owl-bot-staging/v1p1beta1/.flake8 | 33 + owl-bot-staging/v1p1beta1/MANIFEST.in | 2 + owl-bot-staging/v1p1beta1/README.rst | 49 + owl-bot-staging/v1p1beta1/docs/conf.py | 376 + owl-bot-staging/v1p1beta1/docs/index.rst | 7 + .../security_center.rst | 10 + .../securitycenter_v1p1beta1/services.rst | 6 + .../docs/securitycenter_v1p1beta1/types.rst | 6 + .../google/cloud/securitycenter/__init__.py | 101 + .../cloud/securitycenter/gapic_version.py | 16 + .../google/cloud/securitycenter/py.typed | 2 + .../securitycenter_v1p1beta1/__init__.py | 102 + .../gapic_metadata.json | 373 + .../securitycenter_v1p1beta1/gapic_version.py | 16 + .../cloud/securitycenter_v1p1beta1/py.typed | 2 + .../services/__init__.py | 15 + .../services/security_center/__init__.py | 22 + .../services/security_center/async_client.py | 3083 ++ .../services/security_center/client.py | 3264 ++ .../services/security_center/pagers.py | 746 + .../security_center/transports/__init__.py | 38 + .../security_center/transports/base.py | 552 + .../security_center/transports/grpc.py | 889 + .../transports/grpc_asyncio.py | 888 + .../security_center/transports/rest.py | 3232 ++ .../types/__init__.py | 114 + .../securitycenter_v1p1beta1/types/asset.py | 227 + .../securitycenter_v1p1beta1/types/finding.py | 208 + .../securitycenter_v1p1beta1/types/folder.py | 54 + .../types/notification_config.py | 142 + .../types/notification_message.py | 69 + .../types/organization_settings.py | 123 + .../types/resource.py | 85 + .../types/run_asset_discovery_response.py | 76 + .../types/security_marks.py | 80 + .../types/securitycenter_service.py | 1641 + .../securitycenter_v1p1beta1/types/source.py | 87 + owl-bot-staging/v1p1beta1/mypy.ini | 3 + owl-bot-staging/v1p1beta1/noxfile.py | 184 + ...ed_security_center_create_finding_async.py | 53 + ...ted_security_center_create_finding_sync.py | 53 + ...center_create_notification_config_async.py | 53 + ..._center_create_notification_config_sync.py | 53 + ...ted_security_center_create_source_async.py | 52 + ...ated_security_center_create_source_sync.py | 52 + ...center_delete_notification_config_async.py | 50 + ..._center_delete_notification_config_sync.py | 50 + ...ed_security_center_get_iam_policy_async.py | 53 + ...ted_security_center_get_iam_policy_sync.py | 53 + ...ty_center_get_notification_config_async.py | 52 + ...ity_center_get_notification_config_sync.py | 52 + ..._center_get_organization_settings_async.py | 52 + ...y_center_get_organization_settings_sync.py | 52 + ...erated_security_center_get_source_async.py | 52 + ...nerated_security_center_get_source_sync.py | 52 + ...ated_security_center_group_assets_async.py | 54 + ...rated_security_center_group_assets_sync.py | 54 + ...ed_security_center_group_findings_async.py | 54 + ...ted_security_center_group_findings_sync.py | 54 + ...rated_security_center_list_assets_async.py | 53 + ...erated_security_center_list_assets_sync.py | 53 + ...ted_security_center_list_findings_async.py | 53 + ...ated_security_center_list_findings_sync.py | 53 + ..._center_list_notification_configs_async.py | 53 + ...y_center_list_notification_configs_sync.py | 53 + ...ated_security_center_list_sources_async.py | 53 + ...rated_security_center_list_sources_sync.py | 53 + ...curity_center_run_asset_discovery_async.py | 56 + ...ecurity_center_run_asset_discovery_sync.py | 56 + ...security_center_set_finding_state_async.py | 53 + ..._security_center_set_finding_state_sync.py | 53 + ...ed_security_center_set_iam_policy_async.py | 53 + ...ted_security_center_set_iam_policy_sync.py | 53 + ...urity_center_test_iam_permissions_async.py | 54 + ...curity_center_test_iam_permissions_sync.py | 54 + ...ed_security_center_update_finding_async.py | 51 + ...ted_security_center_update_finding_sync.py | 51 + ...center_update_notification_config_async.py | 51 + ..._center_update_notification_config_sync.py | 51 + ...nter_update_organization_settings_async.py | 51 + ...enter_update_organization_settings_sync.py | 51 + ...rity_center_update_security_marks_async.py | 51 + ...urity_center_update_security_marks_sync.py | 51 + ...ted_security_center_update_source_async.py | 51 + ...ated_security_center_update_source_sync.py | 51 + ...google.cloud.securitycenter.v1p1beta1.json | 3808 +++ ...fixup_securitycenter_v1p1beta1_keywords.py | 198 + owl-bot-staging/v1p1beta1/setup.py | 91 + .../v1p1beta1/testing/constraints-3.10.txt | 7 + .../v1p1beta1/testing/constraints-3.11.txt | 7 + .../v1p1beta1/testing/constraints-3.12.txt | 7 + .../v1p1beta1/testing/constraints-3.7.txt | 10 + .../v1p1beta1/testing/constraints-3.8.txt | 7 + .../v1p1beta1/testing/constraints-3.9.txt | 7 + owl-bot-staging/v1p1beta1/tests/__init__.py | 16 + .../v1p1beta1/tests/unit/__init__.py | 16 + .../v1p1beta1/tests/unit/gapic/__init__.py | 16 + .../securitycenter_v1p1beta1/__init__.py | 16 + .../test_security_center.py | 14070 +++++++++ 350 files changed, 137817 insertions(+) create mode 100644 owl-bot-staging/v1/.coveragerc create mode 100644 owl-bot-staging/v1/.flake8 create mode 100644 owl-bot-staging/v1/MANIFEST.in create mode 100644 owl-bot-staging/v1/README.rst create mode 100644 owl-bot-staging/v1/docs/conf.py create mode 100644 owl-bot-staging/v1/docs/index.rst create mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst create mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/services.rst create mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/types.rst create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/py.typed create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py create mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py create mode 100644 owl-bot-staging/v1/mypy.ini create mode 100644 owl-bot-staging/v1/noxfile.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py create mode 100644 owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json create mode 100644 owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py create mode 100644 owl-bot-staging/v1/setup.py create mode 100644 owl-bot-staging/v1/testing/constraints-3.10.txt create mode 100644 owl-bot-staging/v1/testing/constraints-3.11.txt create mode 100644 owl-bot-staging/v1/testing/constraints-3.12.txt create mode 100644 owl-bot-staging/v1/testing/constraints-3.7.txt create mode 100644 owl-bot-staging/v1/testing/constraints-3.8.txt create mode 100644 owl-bot-staging/v1/testing/constraints-3.9.txt create mode 100644 owl-bot-staging/v1/tests/__init__.py create mode 100644 owl-bot-staging/v1/tests/unit/__init__.py create mode 100644 owl-bot-staging/v1/tests/unit/gapic/__init__.py create mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py create mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py create mode 100644 owl-bot-staging/v1beta1/.coveragerc create mode 100644 owl-bot-staging/v1beta1/.flake8 create mode 100644 owl-bot-staging/v1beta1/MANIFEST.in create mode 100644 owl-bot-staging/v1beta1/README.rst create mode 100644 owl-bot-staging/v1beta1/docs/conf.py create mode 100644 owl-bot-staging/v1beta1/docs/index.rst create mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst create mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst create mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py create mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py create mode 100644 owl-bot-staging/v1beta1/mypy.ini create mode 100644 owl-bot-staging/v1beta1/noxfile.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py create mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json create mode 100644 owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py create mode 100644 owl-bot-staging/v1beta1/setup.py create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.10.txt create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.11.txt create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.12.txt create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.7.txt create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.8.txt create mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.9.txt create mode 100644 owl-bot-staging/v1beta1/tests/__init__.py create mode 100644 owl-bot-staging/v1beta1/tests/unit/__init__.py create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py create mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py create mode 100644 owl-bot-staging/v1p1beta1/.coveragerc create mode 100644 owl-bot-staging/v1p1beta1/.flake8 create mode 100644 owl-bot-staging/v1p1beta1/MANIFEST.in create mode 100644 owl-bot-staging/v1p1beta1/README.rst create mode 100644 owl-bot-staging/v1p1beta1/docs/conf.py create mode 100644 owl-bot-staging/v1p1beta1/docs/index.rst create mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst create mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst create mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py create mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py create mode 100644 owl-bot-staging/v1p1beta1/mypy.ini create mode 100644 owl-bot-staging/v1p1beta1/noxfile.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py create mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json create mode 100644 owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py create mode 100644 owl-bot-staging/v1p1beta1/setup.py create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt create mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt create mode 100644 owl-bot-staging/v1p1beta1/tests/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/tests/unit/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py create mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py diff --git a/owl-bot-staging/v1/.coveragerc b/owl-bot-staging/v1/.coveragerc new file mode 100644 index 00000000..45cb273f --- /dev/null +++ b/owl-bot-staging/v1/.coveragerc @@ -0,0 +1,13 @@ +[run] +branch = True + +[report] +show_missing = True +omit = + google/cloud/securitycenter/__init__.py + google/cloud/securitycenter/gapic_version.py +exclude_lines = + # Re-enable the standard pragma + pragma: NO COVER + # Ignore debug-only repr + def __repr__ diff --git a/owl-bot-staging/v1/.flake8 b/owl-bot-staging/v1/.flake8 new file mode 100644 index 00000000..29227d4c --- /dev/null +++ b/owl-bot-staging/v1/.flake8 @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + +# Generated by synthtool. DO NOT EDIT! +[flake8] +ignore = E203, E266, E501, W503 +exclude = + # Exclude generated code. + **/proto/** + **/gapic/** + **/services/** + **/types/** + *_pb2.py + + # Standard linting exemptions. + **/.nox/** + __pycache__, + .git, + *.pyc, + conf.py diff --git a/owl-bot-staging/v1/MANIFEST.in b/owl-bot-staging/v1/MANIFEST.in new file mode 100644 index 00000000..a18e3d0b --- /dev/null +++ b/owl-bot-staging/v1/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include google/cloud/securitycenter *.py +recursive-include google/cloud/securitycenter_v1 *.py diff --git a/owl-bot-staging/v1/README.rst b/owl-bot-staging/v1/README.rst new file mode 100644 index 00000000..f8c63f4c --- /dev/null +++ b/owl-bot-staging/v1/README.rst @@ -0,0 +1,49 @@ +Python Client for Google Cloud Securitycenter API +================================================= + +Quick Start +----------- + +In order to use this library, you first need to go through the following steps: + +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. Enable the Google Cloud Securitycenter API. +4. `Setup Authentication.`_ + +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html + +Installation +~~~~~~~~~~~~ + +Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to +create isolated Python environments. The basic problem it addresses is one of +dependencies and versions, and indirectly permissions. + +With `virtualenv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. + +.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ + + +Mac/Linux +^^^^^^^^^ + +.. code-block:: console + + python3 -m venv + source /bin/activate + /bin/pip install /path/to/library + + +Windows +^^^^^^^ + +.. code-block:: console + + python3 -m venv + \Scripts\activate + \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1/docs/conf.py b/owl-bot-staging/v1/docs/conf.py new file mode 100644 index 00000000..488728ba --- /dev/null +++ b/owl-bot-staging/v1/docs/conf.py @@ -0,0 +1,376 @@ +# -*- 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. +# +# +# google-cloud-securitycenter documentation build configuration file +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath("..")) + +__version__ = "0.1.0" + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +needs_sphinx = "4.0.1" + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.intersphinx", + "sphinx.ext.coverage", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", +] + +# autodoc/autosummary flags +autoclass_content = "both" +autodoc_default_flags = ["members"] +autosummary_generate = True + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Allow markdown includes (so releases.md can include CHANGLEOG.md) +# http://www.sphinx-doc.org/en/master/markdown.html +source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +source_suffix = [".rst", ".md"] + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The root toctree document. +root_doc = "index" + +# General information about the project. +project = u"google-cloud-securitycenter" +copyright = u"2022, Google, LLC" +author = u"Google APIs" # TODO: autogenerate this bit + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +release = __version__ +# The short X.Y version. +version = ".".join(release.split(".")[0:2]) + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ["_build"] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "alabaster" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + "description": "Google Cloud Client Libraries for Python", + "github_user": "googleapis", + "github_repo": "google-cloud-python", + "github_banner": True, + "font_family": "'Roboto', Georgia, sans", + "head_font_family": "'Roboto', Georgia, serif", + "code_font_family": "'Roboto Mono', 'Consolas', monospace", +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = "google-cloud-securitycenter-doc" + +# -- Options for warnings ------------------------------------------------------ + + +suppress_warnings = [ + # Temporarily suppress this to avoid "more than one target found for + # cross-reference" warning, which are intractable for us to avoid while in + # a mono-repo. + # See https://github.com/sphinx-doc/sphinx/blob + # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 + "ref.python" +] + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # 'preamble': '', + # Latex figure (float) alignment + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + root_doc, + "google-cloud-securitycenter.tex", + u"google-cloud-securitycenter Documentation", + author, + "manual", + ) +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + root_doc, + "google-cloud-securitycenter", + u"Google Cloud Securitycenter Documentation", + [author], + 1, + ) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + root_doc, + "google-cloud-securitycenter", + u"google-cloud-securitycenter Documentation", + author, + "google-cloud-securitycenter", + "GAPIC library for Google Cloud Securitycenter API", + "APIs", + ) +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + "python": ("http://python.readthedocs.org/en/latest/", None), + "gax": ("https://gax-python.readthedocs.org/en/latest/", None), + "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), + "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), + "grpc": ("https://grpc.io/grpc/python/", None), + "requests": ("http://requests.kennethreitz.org/en/stable/", None), + "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), + "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), +} + + +# Napoleon settings +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = True +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True diff --git a/owl-bot-staging/v1/docs/index.rst b/owl-bot-staging/v1/docs/index.rst new file mode 100644 index 00000000..47fc2db7 --- /dev/null +++ b/owl-bot-staging/v1/docs/index.rst @@ -0,0 +1,7 @@ +API Reference +------------- +.. toctree:: + :maxdepth: 2 + + securitycenter_v1/services + securitycenter_v1/types diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst b/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst new file mode 100644 index 00000000..bc6175c8 --- /dev/null +++ b/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst @@ -0,0 +1,10 @@ +SecurityCenter +-------------------------------- + +.. automodule:: google.cloud.securitycenter_v1.services.security_center + :members: + :inherited-members: + +.. automodule:: google.cloud.securitycenter_v1.services.security_center.pagers + :members: + :inherited-members: diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/services.rst b/owl-bot-staging/v1/docs/securitycenter_v1/services.rst new file mode 100644 index 00000000..295acede --- /dev/null +++ b/owl-bot-staging/v1/docs/securitycenter_v1/services.rst @@ -0,0 +1,6 @@ +Services for Google Cloud Securitycenter v1 API +=============================================== +.. toctree:: + :maxdepth: 2 + + security_center diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/types.rst b/owl-bot-staging/v1/docs/securitycenter_v1/types.rst new file mode 100644 index 00000000..f7497757 --- /dev/null +++ b/owl-bot-staging/v1/docs/securitycenter_v1/types.rst @@ -0,0 +1,6 @@ +Types for Google Cloud Securitycenter v1 API +============================================ + +.. automodule:: google.cloud.securitycenter_v1.types + :members: + :show-inheritance: diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py new file mode 100644 index 00000000..e268aa1f --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py @@ -0,0 +1,215 @@ +# -*- 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. +# +from google.cloud.securitycenter import gapic_version as package_version + +__version__ = package_version.__version__ + + +from google.cloud.securitycenter_v1.services.security_center.client import SecurityCenterClient +from google.cloud.securitycenter_v1.services.security_center.async_client import SecurityCenterAsyncClient + +from google.cloud.securitycenter_v1.types.access import Access +from google.cloud.securitycenter_v1.types.access import Geolocation +from google.cloud.securitycenter_v1.types.access import ServiceAccountDelegationInfo +from google.cloud.securitycenter_v1.types.asset import Asset +from google.cloud.securitycenter_v1.types.bigquery_export import BigQueryExport +from google.cloud.securitycenter_v1.types.compliance import Compliance +from google.cloud.securitycenter_v1.types.connection import Connection +from google.cloud.securitycenter_v1.types.contact_details import Contact +from google.cloud.securitycenter_v1.types.contact_details import ContactDetails +from google.cloud.securitycenter_v1.types.container import Container +from google.cloud.securitycenter_v1.types.database import Database +from google.cloud.securitycenter_v1.types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule +from google.cloud.securitycenter_v1.types.exfiltration import ExfilResource +from google.cloud.securitycenter_v1.types.exfiltration import Exfiltration +from google.cloud.securitycenter_v1.types.external_system import ExternalSystem +from google.cloud.securitycenter_v1.types.file import File +from google.cloud.securitycenter_v1.types.finding import Finding +from google.cloud.securitycenter_v1.types.folder import Folder +from google.cloud.securitycenter_v1.types.iam_binding import IamBinding +from google.cloud.securitycenter_v1.types.indicator import Indicator +from google.cloud.securitycenter_v1.types.kernel_rootkit import KernelRootkit +from google.cloud.securitycenter_v1.types.kubernetes import Kubernetes +from google.cloud.securitycenter_v1.types.label import Label +from google.cloud.securitycenter_v1.types.mitre_attack import MitreAttack +from google.cloud.securitycenter_v1.types.mute_config import MuteConfig +from google.cloud.securitycenter_v1.types.notification_config import NotificationConfig +from google.cloud.securitycenter_v1.types.notification_message import NotificationMessage +from google.cloud.securitycenter_v1.types.organization_settings import OrganizationSettings +from google.cloud.securitycenter_v1.types.process import EnvironmentVariable +from google.cloud.securitycenter_v1.types.process import Process +from google.cloud.securitycenter_v1.types.resource import Resource +from google.cloud.securitycenter_v1.types.run_asset_discovery_response import RunAssetDiscoveryResponse +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_config import CustomConfig +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule +from google.cloud.securitycenter_v1.types.security_marks import SecurityMarks +from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateBigQueryExportRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateFindingRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateMuteConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateNotificationConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSourceRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteBigQueryExportRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteMuteConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteNotificationConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetBigQueryExportRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetMuteConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetNotificationConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetOrganizationSettingsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GetSourceRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import GroupResult +from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesResponse +from google.cloud.securitycenter_v1.types.securitycenter_service import RunAssetDiscoveryRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import SetFindingStateRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import SetMuteRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateBigQueryExportRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateExternalSystemRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateFindingRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateMuteConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateNotificationConfigRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateOrganizationSettingsRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityMarksRequest +from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSourceRequest +from google.cloud.securitycenter_v1.types.source import Source +from google.cloud.securitycenter_v1.types.vulnerability import Cve +from google.cloud.securitycenter_v1.types.vulnerability import Cvssv3 +from google.cloud.securitycenter_v1.types.vulnerability import Reference +from google.cloud.securitycenter_v1.types.vulnerability import Vulnerability + +__all__ = ('SecurityCenterClient', + 'SecurityCenterAsyncClient', + 'Access', + 'Geolocation', + 'ServiceAccountDelegationInfo', + 'Asset', + 'BigQueryExport', + 'Compliance', + 'Connection', + 'Contact', + 'ContactDetails', + 'Container', + 'Database', + 'EffectiveSecurityHealthAnalyticsCustomModule', + 'ExfilResource', + 'Exfiltration', + 'ExternalSystem', + 'File', + 'Finding', + 'Folder', + 'IamBinding', + 'Indicator', + 'KernelRootkit', + 'Kubernetes', + 'Label', + 'MitreAttack', + 'MuteConfig', + 'NotificationConfig', + 'NotificationMessage', + 'OrganizationSettings', + 'EnvironmentVariable', + 'Process', + 'Resource', + 'RunAssetDiscoveryResponse', + 'CustomConfig', + 'SecurityHealthAnalyticsCustomModule', + 'SecurityMarks', + 'BulkMuteFindingsRequest', + 'BulkMuteFindingsResponse', + 'CreateBigQueryExportRequest', + 'CreateFindingRequest', + 'CreateMuteConfigRequest', + 'CreateNotificationConfigRequest', + 'CreateSecurityHealthAnalyticsCustomModuleRequest', + 'CreateSourceRequest', + 'DeleteBigQueryExportRequest', + 'DeleteMuteConfigRequest', + 'DeleteNotificationConfigRequest', + 'DeleteSecurityHealthAnalyticsCustomModuleRequest', + 'GetBigQueryExportRequest', + 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', + 'GetMuteConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetSecurityHealthAnalyticsCustomModuleRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListBigQueryExportsRequest', + 'ListBigQueryExportsResponse', + 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', + 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListMuteConfigsRequest', + 'ListMuteConfigsResponse', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListSecurityHealthAnalyticsCustomModulesRequest', + 'ListSecurityHealthAnalyticsCustomModulesResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'SetMuteRequest', + 'UpdateBigQueryExportRequest', + 'UpdateExternalSystemRequest', + 'UpdateFindingRequest', + 'UpdateMuteConfigRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityHealthAnalyticsCustomModuleRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', + 'Cve', + 'Cvssv3', + 'Reference', + 'Vulnerability', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py new file mode 100644 index 00000000..2f444fb5 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py @@ -0,0 +1,216 @@ +# -*- 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. +# +from google.cloud.securitycenter_v1 import gapic_version as package_version + +__version__ = package_version.__version__ + + +from .services.security_center import SecurityCenterClient +from .services.security_center import SecurityCenterAsyncClient + +from .types.access import Access +from .types.access import Geolocation +from .types.access import ServiceAccountDelegationInfo +from .types.asset import Asset +from .types.bigquery_export import BigQueryExport +from .types.compliance import Compliance +from .types.connection import Connection +from .types.contact_details import Contact +from .types.contact_details import ContactDetails +from .types.container import Container +from .types.database import Database +from .types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule +from .types.exfiltration import ExfilResource +from .types.exfiltration import Exfiltration +from .types.external_system import ExternalSystem +from .types.file import File +from .types.finding import Finding +from .types.folder import Folder +from .types.iam_binding import IamBinding +from .types.indicator import Indicator +from .types.kernel_rootkit import KernelRootkit +from .types.kubernetes import Kubernetes +from .types.label import Label +from .types.mitre_attack import MitreAttack +from .types.mute_config import MuteConfig +from .types.notification_config import NotificationConfig +from .types.notification_message import NotificationMessage +from .types.organization_settings import OrganizationSettings +from .types.process import EnvironmentVariable +from .types.process import Process +from .types.resource import Resource +from .types.run_asset_discovery_response import RunAssetDiscoveryResponse +from .types.security_health_analytics_custom_config import CustomConfig +from .types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule +from .types.security_marks import SecurityMarks +from .types.securitycenter_service import BulkMuteFindingsRequest +from .types.securitycenter_service import BulkMuteFindingsResponse +from .types.securitycenter_service import CreateBigQueryExportRequest +from .types.securitycenter_service import CreateFindingRequest +from .types.securitycenter_service import CreateMuteConfigRequest +from .types.securitycenter_service import CreateNotificationConfigRequest +from .types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest +from .types.securitycenter_service import CreateSourceRequest +from .types.securitycenter_service import DeleteBigQueryExportRequest +from .types.securitycenter_service import DeleteMuteConfigRequest +from .types.securitycenter_service import DeleteNotificationConfigRequest +from .types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest +from .types.securitycenter_service import GetBigQueryExportRequest +from .types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest +from .types.securitycenter_service import GetMuteConfigRequest +from .types.securitycenter_service import GetNotificationConfigRequest +from .types.securitycenter_service import GetOrganizationSettingsRequest +from .types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest +from .types.securitycenter_service import GetSourceRequest +from .types.securitycenter_service import GroupAssetsRequest +from .types.securitycenter_service import GroupAssetsResponse +from .types.securitycenter_service import GroupFindingsRequest +from .types.securitycenter_service import GroupFindingsResponse +from .types.securitycenter_service import GroupResult +from .types.securitycenter_service import ListAssetsRequest +from .types.securitycenter_service import ListAssetsResponse +from .types.securitycenter_service import ListBigQueryExportsRequest +from .types.securitycenter_service import ListBigQueryExportsResponse +from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest +from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse +from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest +from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse +from .types.securitycenter_service import ListFindingsRequest +from .types.securitycenter_service import ListFindingsResponse +from .types.securitycenter_service import ListMuteConfigsRequest +from .types.securitycenter_service import ListMuteConfigsResponse +from .types.securitycenter_service import ListNotificationConfigsRequest +from .types.securitycenter_service import ListNotificationConfigsResponse +from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest +from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse +from .types.securitycenter_service import ListSourcesRequest +from .types.securitycenter_service import ListSourcesResponse +from .types.securitycenter_service import RunAssetDiscoveryRequest +from .types.securitycenter_service import SetFindingStateRequest +from .types.securitycenter_service import SetMuteRequest +from .types.securitycenter_service import UpdateBigQueryExportRequest +from .types.securitycenter_service import UpdateExternalSystemRequest +from .types.securitycenter_service import UpdateFindingRequest +from .types.securitycenter_service import UpdateMuteConfigRequest +from .types.securitycenter_service import UpdateNotificationConfigRequest +from .types.securitycenter_service import UpdateOrganizationSettingsRequest +from .types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest +from .types.securitycenter_service import UpdateSecurityMarksRequest +from .types.securitycenter_service import UpdateSourceRequest +from .types.source import Source +from .types.vulnerability import Cve +from .types.vulnerability import Cvssv3 +from .types.vulnerability import Reference +from .types.vulnerability import Vulnerability + +__all__ = ( + 'SecurityCenterAsyncClient', +'Access', +'Asset', +'BigQueryExport', +'BulkMuteFindingsRequest', +'BulkMuteFindingsResponse', +'Compliance', +'Connection', +'Contact', +'ContactDetails', +'Container', +'CreateBigQueryExportRequest', +'CreateFindingRequest', +'CreateMuteConfigRequest', +'CreateNotificationConfigRequest', +'CreateSecurityHealthAnalyticsCustomModuleRequest', +'CreateSourceRequest', +'CustomConfig', +'Cve', +'Cvssv3', +'Database', +'DeleteBigQueryExportRequest', +'DeleteMuteConfigRequest', +'DeleteNotificationConfigRequest', +'DeleteSecurityHealthAnalyticsCustomModuleRequest', +'EffectiveSecurityHealthAnalyticsCustomModule', +'EnvironmentVariable', +'ExfilResource', +'Exfiltration', +'ExternalSystem', +'File', +'Finding', +'Folder', +'Geolocation', +'GetBigQueryExportRequest', +'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', +'GetMuteConfigRequest', +'GetNotificationConfigRequest', +'GetOrganizationSettingsRequest', +'GetSecurityHealthAnalyticsCustomModuleRequest', +'GetSourceRequest', +'GroupAssetsRequest', +'GroupAssetsResponse', +'GroupFindingsRequest', +'GroupFindingsResponse', +'GroupResult', +'IamBinding', +'Indicator', +'KernelRootkit', +'Kubernetes', +'Label', +'ListAssetsRequest', +'ListAssetsResponse', +'ListBigQueryExportsRequest', +'ListBigQueryExportsResponse', +'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', +'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', +'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', +'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', +'ListFindingsRequest', +'ListFindingsResponse', +'ListMuteConfigsRequest', +'ListMuteConfigsResponse', +'ListNotificationConfigsRequest', +'ListNotificationConfigsResponse', +'ListSecurityHealthAnalyticsCustomModulesRequest', +'ListSecurityHealthAnalyticsCustomModulesResponse', +'ListSourcesRequest', +'ListSourcesResponse', +'MitreAttack', +'MuteConfig', +'NotificationConfig', +'NotificationMessage', +'OrganizationSettings', +'Process', +'Reference', +'Resource', +'RunAssetDiscoveryRequest', +'RunAssetDiscoveryResponse', +'SecurityCenterClient', +'SecurityHealthAnalyticsCustomModule', +'SecurityMarks', +'ServiceAccountDelegationInfo', +'SetFindingStateRequest', +'SetMuteRequest', +'Source', +'UpdateBigQueryExportRequest', +'UpdateExternalSystemRequest', +'UpdateFindingRequest', +'UpdateMuteConfigRequest', +'UpdateNotificationConfigRequest', +'UpdateOrganizationSettingsRequest', +'UpdateSecurityHealthAnalyticsCustomModuleRequest', +'UpdateSecurityMarksRequest', +'UpdateSourceRequest', +'Vulnerability', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json new file mode 100644 index 00000000..5c23812a --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json @@ -0,0 +1,688 @@ + { + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "python", + "libraryPackage": "google.cloud.securitycenter_v1", + "protoPackage": "google.cloud.securitycenter.v1", + "schema": "1.0", + "services": { + "SecurityCenter": { + "clients": { + "grpc": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "BulkMuteFindings": { + "methods": [ + "bulk_mute_findings" + ] + }, + "CreateBigQueryExport": { + "methods": [ + "create_big_query_export" + ] + }, + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateMuteConfig": { + "methods": [ + "create_mute_config" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteBigQueryExport": { + "methods": [ + "delete_big_query_export" + ] + }, + "DeleteMuteConfig": { + "methods": [ + "delete_mute_config" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, + "GetBigQueryExport": { + "methods": [ + "get_big_query_export" + ] + }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetMuteConfig": { + "methods": [ + "get_mute_config" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListBigQueryExports": { + "methods": [ + "list_big_query_exports" + ] + }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListMuteConfigs": { + "methods": [ + "list_mute_configs" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "SetMute": { + "methods": [ + "set_mute" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateBigQueryExport": { + "methods": [ + "update_big_query_export" + ] + }, + "UpdateExternalSystem": { + "methods": [ + "update_external_system" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateMuteConfig": { + "methods": [ + "update_mute_config" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "grpc-async": { + "libraryClient": "SecurityCenterAsyncClient", + "rpcs": { + "BulkMuteFindings": { + "methods": [ + "bulk_mute_findings" + ] + }, + "CreateBigQueryExport": { + "methods": [ + "create_big_query_export" + ] + }, + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateMuteConfig": { + "methods": [ + "create_mute_config" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteBigQueryExport": { + "methods": [ + "delete_big_query_export" + ] + }, + "DeleteMuteConfig": { + "methods": [ + "delete_mute_config" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, + "GetBigQueryExport": { + "methods": [ + "get_big_query_export" + ] + }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetMuteConfig": { + "methods": [ + "get_mute_config" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListBigQueryExports": { + "methods": [ + "list_big_query_exports" + ] + }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListMuteConfigs": { + "methods": [ + "list_mute_configs" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "SetMute": { + "methods": [ + "set_mute" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateBigQueryExport": { + "methods": [ + "update_big_query_export" + ] + }, + "UpdateExternalSystem": { + "methods": [ + "update_external_system" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateMuteConfig": { + "methods": [ + "update_mute_config" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "rest": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "BulkMuteFindings": { + "methods": [ + "bulk_mute_findings" + ] + }, + "CreateBigQueryExport": { + "methods": [ + "create_big_query_export" + ] + }, + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateMuteConfig": { + "methods": [ + "create_mute_config" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteBigQueryExport": { + "methods": [ + "delete_big_query_export" + ] + }, + "DeleteMuteConfig": { + "methods": [ + "delete_mute_config" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, + "GetBigQueryExport": { + "methods": [ + "get_big_query_export" + ] + }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetMuteConfig": { + "methods": [ + "get_mute_config" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListBigQueryExports": { + "methods": [ + "list_big_query_exports" + ] + }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListMuteConfigs": { + "methods": [ + "list_mute_configs" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "SetMute": { + "methods": [ + "set_mute" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateBigQueryExport": { + "methods": [ + "update_big_query_export" + ] + }, + "UpdateExternalSystem": { + "methods": [ + "update_external_system" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateMuteConfig": { + "methods": [ + "update_mute_config" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + } + } + } + } +} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py new file mode 100644 index 00000000..e8e1c384 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py @@ -0,0 +1,15 @@ +# -*- 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. +# diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py new file mode 100644 index 00000000..4712915a --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .client import SecurityCenterClient +from .async_client import SecurityCenterAsyncClient + +__all__ = ( + 'SecurityCenterClient', + 'SecurityCenterAsyncClient', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py new file mode 100644 index 00000000..4b546e85 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py @@ -0,0 +1,5701 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union + +from google.cloud.securitycenter_v1 import gapic_version as package_version + +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1.services.security_center import pagers +from google.cloud.securitycenter_v1.types import access +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import compliance +from google.cloud.securitycenter_v1.types import connection +from google.cloud.securitycenter_v1.types import container +from google.cloud.securitycenter_v1.types import database +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import exfiltration +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import file +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import iam_binding +from google.cloud.securitycenter_v1.types import indicator +from google.cloud.securitycenter_v1.types import kernel_rootkit +from google.cloud.securitycenter_v1.types import kubernetes +from google.cloud.securitycenter_v1.types import mitre_attack +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import process +from google.cloud.securitycenter_v1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.cloud.securitycenter_v1.types import vulnerability +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .client import SecurityCenterClient + + +class SecurityCenterAsyncClient: + """V1 APIs for Security Center service.""" + + _client: SecurityCenterClient + + DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT + + asset_path = staticmethod(SecurityCenterClient.asset_path) + parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) + big_query_export_path = staticmethod(SecurityCenterClient.big_query_export_path) + parse_big_query_export_path = staticmethod(SecurityCenterClient.parse_big_query_export_path) + effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.effective_security_health_analytics_custom_module_path) + parse_effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path) + external_system_path = staticmethod(SecurityCenterClient.external_system_path) + parse_external_system_path = staticmethod(SecurityCenterClient.parse_external_system_path) + finding_path = staticmethod(SecurityCenterClient.finding_path) + parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) + mute_config_path = staticmethod(SecurityCenterClient.mute_config_path) + parse_mute_config_path = staticmethod(SecurityCenterClient.parse_mute_config_path) + notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) + parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) + organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) + parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) + security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.security_health_analytics_custom_module_path) + parse_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_security_health_analytics_custom_module_path) + security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) + parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) + source_path = staticmethod(SecurityCenterClient.source_path) + parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) + topic_path = staticmethod(SecurityCenterClient.topic_path) + parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) + common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) + parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) + common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) + parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) + common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) + parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) + common_project_path = staticmethod(SecurityCenterClient.common_project_path) + parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) + common_location_path = staticmethod(SecurityCenterClient.common_location_path) + parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = SecurityCenterClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + + ) + + async def bulk_mute_findings(self, + request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Kicks off an LRO to bulk mute findings for a parent + based on a filter. The parent can be either an + organization, folder or project. The findings matched by + the filter will be muted after the LRO is done. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_bulk_mute_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.BulkMuteFindingsRequest( + parent="parent_value", + ) + + # Make the request + operation = client.bulk_mute_findings(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]]): + The request object. Request message for bulk findings + update. + Note: + 1. If multiple bulk update requests + match the same resource, the order in + which they get executed is not defined. + 2. Once a bulk operation is started, + there is no way to stop it. + parent (:class:`str`): + Required. The parent, at which bulk action needs to be + applied. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` + The response to a BulkMute request. Contains the LRO + information. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.BulkMuteFindingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.bulk_mute_findings, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + securitycenter_service.BulkMuteFindingsResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + async def create_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for creating security + health analytics custom modules. + parent (:class:`str`): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = security_health_analytics_custom_module + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]]): + The request object. Request message for creating a + source. + parent (:class:`str`): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (:class:`google.cloud.securitycenter_v1.types.Source`): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]]): + The request object. Request message for creating a + finding. + parent (:class:`str`): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + It must be alphanumeric and less than or + equal to 32 characters and greater than + 0 characters in length. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (:class:`google.cloud.securitycenter_v1.types.Finding`): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_mute_config(self, + request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + mute_config: Optional[gcs_mute_config.MuteConfig] = None, + mute_config_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_mute_config.MuteConfig: + r"""Creates a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.CreateMuteConfigRequest( + parent="parent_value", + mute_config=mute_config, + mute_config_id="mute_config_id_value", + ) + + # Make the request + response = await client.create_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]]): + The request object. Request message for creating a mute + config. + parent (:class:`str`): + Required. Resource name of the new mute configs's + parent. Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): + Required. The mute config being + created. + + This corresponds to the ``mute_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute_config_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + It must consist of lower case letters, + numbers, and hyphen, with the first + character a letter, the last a letter or + a number, and a 63 character maximum. + + This corresponds to the ``mute_config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, mute_config, mute_config_id]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateMuteConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if mute_config is not None: + request.mute_config = mute_config + if mute_config_id is not None: + request.mute_config_id = mute_config_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_mute_config, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_notification_config(self, + request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + config_id: Optional[str] = None, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Creates a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = await client.create_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]]): + The request object. Request message for creating a + notification config. + parent (:class:`str`): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + config_id (:class:`str`): + Required. + Unique identifier provided by the client + within the parent scope. It must be + between 1 and 128 characters and contain + alphanumeric characters, underscores, or + hyphens only. + + This corresponds to the ``config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): + Required. The notification config + being created. The name and the service + account will be ignored as they are both + output only fields on this resource. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, config_id, notification_config]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if config_id is not None: + request.config_id = config_id + if notification_config is not None: + request.notification_config = notification_config + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def delete_mute_config(self, + request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes an existing mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteMuteConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_mute_config(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]]): + The request object. Request message for deleting a mute + config. + name (:class:`str`): + Required. Name of the mute config to delete. Its format + is organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.DeleteMuteConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_mute_config, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + async def delete_notification_config(self, + request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_notification_config(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]]): + The request object. Request message for deleting a + notification config. + name (:class:`str`): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", + or + "projects/[project_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.DeleteNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + async def delete_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + await client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for deleting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + async def get_big_query_export(self, + request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Gets a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetBigQueryExportRequest( + name="name_value", + ) + + # Make the request + response = await client.get_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]]): + The request object. Request message for retrieving a + BigQuery export. + name (:class:`str`): + Required. Name of the BigQuery export to retrieve. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetBigQueryExportRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_big_query_export, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): + The request object. Request message for ``GetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_mute_config(self, + request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> mute_config.MuteConfig: + r"""Gets a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetMuteConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]]): + The request object. Request message for retrieving a mute + config. + name (:class:`str`): + Required. Name of the mute config to retrieve. Its + format is + organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetMuteConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_mute_config, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_notification_config(self, + request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> notification_config.NotificationConfig: + r"""Gets a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]]): + The request object. Request message for getting a + notification config. + name (:class:`str`): + Required. Name of the notification config to get. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", + or + "projects/[project_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_notification_config, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]]): + The request object. Request message for getting + organization settings. + name (:class:`str`): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_effective_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_effective_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = await client.get_effective_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting effective + security health analytics custom + modules. + name (:class:`str`): + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_effective_security_health_analytics_custom_module, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = await client.get_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_security_health_analytics_custom_module, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): + The request object. Request message for getting a source. + name (:class:`str`): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsAsyncPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsAsyncPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_group_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]]): + The request object. Request message for grouping by + findings. + parent (:class:`str`): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (:class:`str`): + Required. Expression that defines what assets fields to + use for grouping (including ``state_change``). The + string value should follow SQL syntax: comma separated + list of fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration + is set: + + - state_change + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GroupFindingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsAsyncPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_descendant_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (:class:`str`): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsAsyncPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_mute_configs(self, + request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsAsyncPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (:class:`str`): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: + Response message for listing mute + configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListMuteConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_mute_configs, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListMuteConfigsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_notification_configs(self, + request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListNotificationConfigsAsyncPager: + r"""Lists notification configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): + The request object. Request message for listing + notification configs. + parent (:class:`str`): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: + Response message for listing + notification configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListNotificationConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_notification_configs, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListNotificationConfigsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_effective_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_effective_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing effective + security health analytics custom + modules. + parent (:class:`str`): + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + effective security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing security + health analytics custom modules. + parent (:class:`str`): + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing security + health analytics custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesAsyncPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_sources(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]]): + The request object. Request message for listing sources. + parent (:class:`str`): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListSourcesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListSourcesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]]): + The request object. Request message for running asset + discovery for an organization. + parent (:class:`str`): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` + Response of asset discovery run + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.RunAssetDiscoveryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.run_asset_discovery, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + run_asset_discovery_response.RunAssetDiscoveryResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + async def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]]): + The request object. Request message for updating a + finding's state. + name (:class:`str`): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (:class:`google.cloud.securitycenter_v1.types.Finding.State`): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.SetFindingStateRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_finding_state, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def set_mute(self, + request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, + *, + name: Optional[str] = None, + mute: Optional[finding.Finding.Mute] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the mute state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_set_mute(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetMuteRequest( + name="name_value", + mute="UNDEFINED", + ) + + # Make the request + response = await client.set_mute(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]]): + The request object. Request message for updating a + finding's mute status. + name (:class:`str`): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute (:class:`google.cloud.securitycenter_v1.types.Finding.Mute`): + Required. The desired state of the + Mute. + + This corresponds to the ``mute`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, mute]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.SetMuteRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if mute is not None: + request.mute = mute + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_mute, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): + The request object. Request message for ``SetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_iam_policy, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): + The request object. Request message for ``TestIamPermissions`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (:class:`MutableSequence[str]`): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_external_system(self, + request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, + *, + external_system: Optional[gcs_external_system.ExternalSystem] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_external_system.ExternalSystem: + r"""Updates external system. This is for a given finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_external_system(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateExternalSystemRequest( + ) + + # Make the request + response = await client.update_external_system(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]]): + The request object. Request message for updating a + ExternalSystem resource. + external_system (:class:`google.cloud.securitycenter_v1.types.ExternalSystem`): + Required. The external system + resource to update. + + This corresponds to the ``external_system`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating + the external system resource. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.ExternalSystem: + Representation of third party + SIEM/SOAR fields within SCC. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([external_system, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateExternalSystemRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if external_system is not None: + request.external_system = external_system + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_external_system, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("external_system.name", request.external_system.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]]): + The request object. Request message for updating or + creating a finding. + finding (:class:`google.cloud.securitycenter_v1.types.Finding`): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must be alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_mute_config(self, + request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, + *, + mute_config: Optional[gcs_mute_config.MuteConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_mute_config.MuteConfig: + r"""Updates a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.UpdateMuteConfigRequest( + mute_config=mute_config, + ) + + # Make the request + response = await client.update_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]]): + The request object. Request message for updating a mute + config. + mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): + Required. The mute config being + updated. + + This corresponds to the ``mute_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The list of fields to be updated. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([mute_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateMuteConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if mute_config is not None: + request.mute_config = mute_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_mute_config, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("mute_config.name", request.mute_config.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_notification_config(self, + request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, + *, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = await client.update_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]]): + The request object. Request message for updating a + notification config. + notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): + Required. The notification config to + update. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating + the notification config. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([notification_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if notification_config is not None: + request.notification_config = notification_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("notification_config.name", request.notification_config.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]]): + The request object. Request message for updating an + organization's settings. + organization_settings (:class:`google.cloud.securitycenter_v1.types.OrganizationSettings`): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_organization_settings, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = await client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_health_analytics_custom_module, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = security_health_analytics_custom_module + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]]): + The request object. Request message for updating a + source. + source (:class:`google.cloud.securitycenter_v1.types.Source`): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (:class:`google.cloud.securitycenter_v1.types.SecurityMarks`): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSecurityMarksRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_marks, + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_big_query_export(self, + request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, + *, + parent: Optional[str] = None, + big_query_export: Optional[bigquery_export.BigQueryExport] = None, + big_query_export_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Creates a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateBigQueryExportRequest( + parent="parent_value", + big_query_export_id="big_query_export_id_value", + ) + + # Make the request + response = await client.create_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]]): + The request object. Request message for creating a + BigQuery export. + parent (:class:`str`): + Required. The name of the parent resource of the new + BigQuery export. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): + Required. The BigQuery export being + created. + + This corresponds to the ``big_query_export`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + big_query_export_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + It must consist of lower case letters, + numbers, and hyphen, with the first + character a letter, the last a letter or + a number, and a 63 character maximum. + + This corresponds to the ``big_query_export_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, big_query_export, big_query_export_id]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateBigQueryExportRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if big_query_export is not None: + request.big_query_export = big_query_export + if big_query_export_id is not None: + request.big_query_export_id = big_query_export_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_big_query_export, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def delete_big_query_export(self, + request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes an existing BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteBigQueryExportRequest( + name="name_value", + ) + + # Make the request + await client.delete_big_query_export(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]]): + The request object. Request message for deleting a + BigQuery export. + name (:class:`str`): + Required. The name of the BigQuery export to delete. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.DeleteBigQueryExportRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_big_query_export, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + async def update_big_query_export(self, + request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, + *, + big_query_export: Optional[bigquery_export.BigQueryExport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Updates a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateBigQueryExportRequest( + ) + + # Make the request + response = await client.update_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]]): + The request object. Request message for updating a + BigQuery export. + big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): + Required. The BigQuery export being + updated. + + This corresponds to the ``big_query_export`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The list of fields to be updated. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([big_query_export, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateBigQueryExportRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if big_query_export is not None: + request.big_query_export = big_query_export + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_big_query_export, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("big_query_export.name", request.big_query_export.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_big_query_exports(self, + request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListBigQueryExportsAsyncPager: + r"""Lists BigQuery exports. Note that when requesting + BigQuery exports at a given level all exports under that + level are also returned e.g. if requesting BigQuery + exports under a folder, then all BigQuery exports + immediately under the folder plus the ones created under + the projects within the folder are returned. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_big_query_exports(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListBigQueryExportsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_big_query_exports(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]]): + The request object. Request message for listing BigQuery + exports at a given scope e.g. + organization, folder or project. + parent (:class:`str`): + Required. The parent, which owns the collection of + BigQuery exports. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager: + Response message for listing BigQuery + exports. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListBigQueryExportsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_big_query_exports, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListBigQueryExportsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_operations( + self, + request: Optional[operations_pb2.ListOperationsRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operations_pb2.ListOperationsResponse: + r"""Lists operations that match the specified filter in the request. + + Args: + request (:class:`~.operations_pb2.ListOperationsRequest`): + The request object. Request message for + `ListOperations` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + ~.operations_pb2.ListOperationsResponse: + Response message for ``ListOperations`` method. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.ListOperationsRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._client._transport.list_operations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def get_operation( + self, + request: Optional[operations_pb2.GetOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operations_pb2.Operation: + r"""Gets the latest state of a long-running operation. + + Args: + request (:class:`~.operations_pb2.GetOperationRequest`): + The request object. Request message for + `GetOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + ~.operations_pb2.Operation: + An ``Operation`` object. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.GetOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._client._transport.get_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + async def delete_operation( + self, + request: Optional[operations_pb2.DeleteOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a long-running operation. + + This method indicates that the client is no longer interested + in the operation result. It does not cancel the operation. + If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.DeleteOperationRequest`): + The request object. Request message for + `DeleteOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.DeleteOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._client._transport.delete_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + async def cancel_operation( + self, + request: Optional[operations_pb2.CancelOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Starts asynchronous cancellation on a long-running operation. + + The server makes a best effort to cancel the operation, but success + is not guaranteed. If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.CancelOperationRequest`): + The request object. Request message for + `CancelOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.CancelOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._client._transport.cancel_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterAsyncClient", +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py new file mode 100644 index 00000000..68222d1a --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py @@ -0,0 +1,5894 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast + +from google.cloud.securitycenter_v1 import gapic_version as package_version + +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1.services.security_center import pagers +from google.cloud.securitycenter_v1.types import access +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import compliance +from google.cloud.securitycenter_v1.types import connection +from google.cloud.securitycenter_v1.types import container +from google.cloud.securitycenter_v1.types import database +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import exfiltration +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import file +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import iam_binding +from google.cloud.securitycenter_v1.types import indicator +from google.cloud.securitycenter_v1.types import kernel_rootkit +from google.cloud.securitycenter_v1.types import kubernetes +from google.cloud.securitycenter_v1.types import mitre_attack +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import process +from google.cloud.securitycenter_v1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.cloud.securitycenter_v1.types import vulnerability +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import SecurityCenterGrpcTransport +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .transports.rest import SecurityCenterRestTransport + + +class SecurityCenterClientMeta(type): + """Metaclass for the SecurityCenter client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] + _transport_registry["grpc"] = SecurityCenterGrpcTransport + _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport + _transport_registry["rest"] = SecurityCenterRestTransport + + def get_transport_class(cls, + label: Optional[str] = None, + ) -> Type[SecurityCenterTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class SecurityCenterClient(metaclass=SecurityCenterClientMeta): + """V1 APIs for Security Center service.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "securitycenter.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file( + filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def asset_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified asset string.""" + return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_asset_path(path: str) -> Dict[str,str]: + """Parses a asset path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def big_query_export_path(organization: str,export: str,) -> str: + """Returns a fully-qualified big_query_export string.""" + return "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) + + @staticmethod + def parse_big_query_export_path(path: str) -> Dict[str,str]: + """Parses a big_query_export path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/bigQueryExports/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def effective_security_health_analytics_custom_module_path(organization: str,effective_custom_module: str,) -> str: + """Returns a fully-qualified effective_security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) + + @staticmethod + def parse_effective_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: + """Parses a effective_security_health_analytics_custom_module path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/effectiveCustomModules/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def external_system_path(organization: str,source: str,finding: str,externalsystem: str,) -> str: + """Returns a fully-qualified external_system string.""" + return "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) + + @staticmethod + def parse_external_system_path(path: str) -> Dict[str,str]: + """Parses a external_system path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)/externalSystems/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def finding_path(organization: str,source: str,finding: str,) -> str: + """Returns a fully-qualified finding string.""" + return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + + @staticmethod + def parse_finding_path(path: str) -> Dict[str,str]: + """Parses a finding path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def mute_config_path(organization: str,mute_config: str,) -> str: + """Returns a fully-qualified mute_config string.""" + return "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) + + @staticmethod + def parse_mute_config_path(path: str) -> Dict[str,str]: + """Parses a mute_config path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/muteConfigs/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def notification_config_path(organization: str,notification_config: str,) -> str: + """Returns a fully-qualified notification_config string.""" + return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) + + @staticmethod + def parse_notification_config_path(path: str) -> Dict[str,str]: + """Parses a notification_config path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def organization_settings_path(organization: str,) -> str: + """Returns a fully-qualified organization_settings string.""" + return "organizations/{organization}/organizationSettings".format(organization=organization, ) + + @staticmethod + def parse_organization_settings_path(path: str) -> Dict[str,str]: + """Parses a organization_settings path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) + return m.groupdict() if m else {} + + @staticmethod + def security_health_analytics_custom_module_path(organization: str,custom_module: str,) -> str: + """Returns a fully-qualified security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) + + @staticmethod + def parse_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: + """Parses a security_health_analytics_custom_module path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/customModules/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def security_marks_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified security_marks string.""" + return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_security_marks_path(path: str) -> Dict[str,str]: + """Parses a security_marks path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) + return m.groupdict() if m else {} + + @staticmethod + def source_path(organization: str,source: str,) -> str: + """Returns a fully-qualified source string.""" + return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + + @staticmethod + def parse_source_path(path: str) -> Dict[str,str]: + """Parses a source path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def topic_path(project: str,topic: str,) -> str: + """Returns a fully-qualified topic string.""" + return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) + + @staticmethod + def parse_topic_path(path: str) -> Dict[str,str]: + """Parses a topic path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path(billing_account: str, ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str,str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str, ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder, ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str,str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str, ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization, ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str,str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str, ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format(project=project, ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str,str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str, ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format(project=project, location=location, ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str,str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, SecurityCenterTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError("client_options.api_key and credentials are mutually exclusive") + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, SecurityCenterTransport): + # transport is a SecurityCenterTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError("When providing a transport instance, " + "provide its credentials directly.") + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): + credentials = google.auth._default.get_api_key_credentials(api_key_value) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def bulk_mute_findings(self, + request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Kicks off an LRO to bulk mute findings for a parent + based on a filter. The parent can be either an + organization, folder or project. The findings matched by + the filter will be muted after the LRO is done. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_bulk_mute_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.BulkMuteFindingsRequest( + parent="parent_value", + ) + + # Make the request + operation = client.bulk_mute_findings(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]): + The request object. Request message for bulk findings + update. + Note: + 1. If multiple bulk update requests + match the same resource, the order in + which they get executed is not defined. + 2. Once a bulk operation is started, + there is no way to stop it. + parent (str): + Required. The parent, at which bulk action needs to be + applied. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` + The response to a BulkMute request. Contains the LRO + information. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.BulkMuteFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.BulkMuteFindingsRequest): + request = securitycenter_service.BulkMuteFindingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.bulk_mute_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + securitycenter_service.BulkMuteFindingsResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + def create_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for creating security + health analytics custom modules. + parent (str): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = security_health_analytics_custom_module + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_security_health_analytics_custom_module] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]): + The request object. Request message for creating a + source. + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (google.cloud.securitycenter_v1.types.Source): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateSourceRequest): + request = securitycenter_service.CreateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]): + The request object. Request message for creating a + finding. + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (str): + Required. Unique identifier provided + by the client within the parent scope. + It must be alphanumeric and less than or + equal to 32 characters and greater than + 0 characters in length. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (google.cloud.securitycenter_v1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateFindingRequest): + request = securitycenter_service.CreateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_mute_config(self, + request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + mute_config: Optional[gcs_mute_config.MuteConfig] = None, + mute_config_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_mute_config.MuteConfig: + r"""Creates a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.CreateMuteConfigRequest( + parent="parent_value", + mute_config=mute_config, + mute_config_id="mute_config_id_value", + ) + + # Make the request + response = client.create_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]): + The request object. Request message for creating a mute + config. + parent (str): + Required. Resource name of the new mute configs's + parent. Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute_config (google.cloud.securitycenter_v1.types.MuteConfig): + Required. The mute config being + created. + + This corresponds to the ``mute_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute_config_id (str): + Required. Unique identifier provided + by the client within the parent scope. + It must consist of lower case letters, + numbers, and hyphen, with the first + character a letter, the last a letter or + a number, and a 63 character maximum. + + This corresponds to the ``mute_config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, mute_config, mute_config_id]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateMuteConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateMuteConfigRequest): + request = securitycenter_service.CreateMuteConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if mute_config is not None: + request.mute_config = mute_config + if mute_config_id is not None: + request.mute_config_id = mute_config_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_mute_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_notification_config(self, + request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + config_id: Optional[str] = None, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Creates a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = client.create_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]): + The request object. Request message for creating a + notification config. + parent (str): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + config_id (str): + Required. + Unique identifier provided by the client + within the parent scope. It must be + between 1 and 128 characters and contain + alphanumeric characters, underscores, or + hyphens only. + + This corresponds to the ``config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): + Required. The notification config + being created. The name and the service + account will be ignored as they are both + output only fields on this resource. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, config_id, notification_config]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): + request = securitycenter_service.CreateNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if config_id is not None: + request.config_id = config_id + if notification_config is not None: + request.notification_config = notification_config + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_mute_config(self, + request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes an existing mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteMuteConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_mute_config(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]): + The request object. Request message for deleting a mute + config. + name (str): + Required. Name of the mute config to delete. Its format + is organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteMuteConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.DeleteMuteConfigRequest): + request = securitycenter_service.DeleteMuteConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_mute_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def delete_notification_config(self, + request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_notification_config(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]): + The request object. Request message for deleting a + notification config. + name (str): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", + or + "projects/[project_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): + request = securitycenter_service.DeleteNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def delete_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for deleting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_security_health_analytics_custom_module] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def get_big_query_export(self, + request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Gets a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetBigQueryExportRequest( + name="name_value", + ) + + # Make the request + response = client.get_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]): + The request object. Request message for retrieving a + BigQuery export. + name (str): + Required. Name of the BigQuery export to retrieve. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetBigQueryExportRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetBigQueryExportRequest): + request = securitycenter_service.GetBigQueryExportRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_big_query_export] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): + The request object. Request message for ``GetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.GetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_mute_config(self, + request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> mute_config.MuteConfig: + r"""Gets a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetMuteConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]): + The request object. Request message for retrieving a mute + config. + name (str): + Required. Name of the mute config to retrieve. Its + format is + organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetMuteConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetMuteConfigRequest): + request = securitycenter_service.GetMuteConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_mute_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_notification_config(self, + request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> notification_config.NotificationConfig: + r"""Gets a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]): + The request object. Request message for getting a + notification config. + name (str): + Required. Name of the notification config to get. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", + or + "projects/[project_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): + request = securitycenter_service.GetNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]): + The request object. Request message for getting + organization settings. + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): + request = securitycenter_service.GetOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_effective_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_effective_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = client.get_effective_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting effective + security health analytics custom + modules. + name (str): + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_effective_security_health_analytics_custom_module] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = client.get_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_security_health_analytics_custom_module] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): + The request object. Request message for getting a source. + name (str): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSourceRequest): + request = securitycenter_service.GetSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupAssetsRequest): + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_group_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]): + The request object. Request message for grouping by + findings. + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (str): + Required. Expression that defines what assets fields to + use for grouping (including ``state_change``). The + string value should follow SQL syntax: comma separated + list of fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration + is set: + + - state_change + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupFindingsRequest): + request = securitycenter_service.GroupFindingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListAssetsRequest): + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_descendant_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (str): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_descendant_security_health_analytics_custom_modules] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListFindingsRequest): + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_mute_configs(self, + request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (str): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: + Response message for listing mute + configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListMuteConfigsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): + request = securitycenter_service.ListMuteConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListMuteConfigsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_notification_configs(self, + request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListNotificationConfigsPager: + r"""Lists notification configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): + The request object. Request message for listing + notification configs. + parent (str): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: + Response message for listing + notification configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListNotificationConfigsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): + request = securitycenter_service.ListNotificationConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListNotificationConfigsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_effective_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_effective_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing effective + security health analytics custom + modules. + parent (str): + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + effective security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_effective_security_health_analytics_custom_modules] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_security_health_analytics_custom_modules(self, + request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing security + health analytics custom modules. + parent (str): + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager: + Response message for listing security + health analytics custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_security_health_analytics_custom_modules] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListSecurityHealthAnalyticsCustomModulesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_sources(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]): + The request object. Request message for listing sources. + parent (str): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListSourcesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListSourcesRequest): + request = securitycenter_service.ListSourcesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_sources] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListSourcesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]): + The request object. Request message for running asset + discovery for an organization. + parent (str): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` + Response of asset discovery run + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.RunAssetDiscoveryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): + request = securitycenter_service.RunAssetDiscoveryRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + run_asset_discovery_response.RunAssetDiscoveryResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_set_finding_state(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]): + The request object. Request message for updating a + finding's state. + name (str): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (google.cloud.securitycenter_v1.types.Finding.State): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.SetFindingStateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.SetFindingStateRequest): + request = securitycenter_service.SetFindingStateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_finding_state] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_mute(self, + request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, + *, + name: Optional[str] = None, + mute: Optional[finding.Finding.Mute] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the mute state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_set_mute(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetMuteRequest( + name="name_value", + mute="UNDEFINED", + ) + + # Make the request + response = client.set_mute(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]): + The request object. Request message for updating a + finding's mute status. + name (str): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + mute (google.cloud.securitycenter_v1.types.Finding.Mute): + Required. The desired state of the + Mute. + + This corresponds to the ``mute`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, mute]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.SetMuteRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.SetMuteRequest): + request = securitycenter_service.SetMuteRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if mute is not None: + request.mute = mute + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_mute] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): + The request object. Request message for ``SetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.SetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): + The request object. Request message for ``TestIamPermissions`` method. + resource (str): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (MutableSequence[str]): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.TestIamPermissionsRequest() + if resource is not None: + request.resource = resource + if permissions: + request.permissions.extend(permissions) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_external_system(self, + request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, + *, + external_system: Optional[gcs_external_system.ExternalSystem] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_external_system.ExternalSystem: + r"""Updates external system. This is for a given finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_external_system(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateExternalSystemRequest( + ) + + # Make the request + response = client.update_external_system(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]): + The request object. Request message for updating a + ExternalSystem resource. + external_system (google.cloud.securitycenter_v1.types.ExternalSystem): + Required. The external system + resource to update. + + This corresponds to the ``external_system`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating + the external system resource. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.ExternalSystem: + Representation of third party + SIEM/SOAR fields within SCC. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([external_system, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateExternalSystemRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateExternalSystemRequest): + request = securitycenter_service.UpdateExternalSystemRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if external_system is not None: + request.external_system = external_system + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_external_system] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("external_system.name", request.external_system.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]): + The request object. Request message for updating or + creating a finding. + finding (google.cloud.securitycenter_v1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must be alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateFindingRequest): + request = securitycenter_service.UpdateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_mute_config(self, + request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, + *, + mute_config: Optional[gcs_mute_config.MuteConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_mute_config.MuteConfig: + r"""Updates a mute config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.UpdateMuteConfigRequest( + mute_config=mute_config, + ) + + # Make the request + response = client.update_mute_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]): + The request object. Request message for updating a mute + config. + mute_config (google.cloud.securitycenter_v1.types.MuteConfig): + Required. The mute config being + updated. + + This corresponds to the ``mute_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to be updated. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([mute_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateMuteConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateMuteConfigRequest): + request = securitycenter_service.UpdateMuteConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if mute_config is not None: + request.mute_config = mute_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_mute_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("mute_config.name", request.mute_config.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_notification_config(self, + request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, + *, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = client.update_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]): + The request object. Request message for updating a + notification config. + notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): + Required. The notification config to + update. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating + the notification config. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([notification_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): + request = securitycenter_service.UpdateNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if notification_config is not None: + request.notification_config = notification_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("notification_config.name", request.notification_config.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]): + The request object. Request message for updating an + organization's settings. + organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_security_health_analytics_custom_module(self, + request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, + *, + security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_health_analytics_custom_module, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = security_health_analytics_custom_module + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_security_health_analytics_custom_module] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]): + The request object. Request message for updating a + source. + source (google.cloud.securitycenter_v1.types.Source): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSourceRequest): + request = securitycenter_service.UpdateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_security_marks(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityMarksRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): + request = securitycenter_service.UpdateSecurityMarksRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_security_marks] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_big_query_export(self, + request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, + *, + parent: Optional[str] = None, + big_query_export: Optional[bigquery_export.BigQueryExport] = None, + big_query_export_id: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Creates a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateBigQueryExportRequest( + parent="parent_value", + big_query_export_id="big_query_export_id_value", + ) + + # Make the request + response = client.create_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]): + The request object. Request message for creating a + BigQuery export. + parent (str): + Required. The name of the parent resource of the new + BigQuery export. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): + Required. The BigQuery export being + created. + + This corresponds to the ``big_query_export`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + big_query_export_id (str): + Required. Unique identifier provided + by the client within the parent scope. + It must consist of lower case letters, + numbers, and hyphen, with the first + character a letter, the last a letter or + a number, and a 63 character maximum. + + This corresponds to the ``big_query_export_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, big_query_export, big_query_export_id]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateBigQueryExportRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateBigQueryExportRequest): + request = securitycenter_service.CreateBigQueryExportRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if big_query_export is not None: + request.big_query_export = big_query_export + if big_query_export_id is not None: + request.big_query_export_id = big_query_export_id + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_big_query_export] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_big_query_export(self, + request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes an existing BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteBigQueryExportRequest( + name="name_value", + ) + + # Make the request + client.delete_big_query_export(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]): + The request object. Request message for deleting a + BigQuery export. + name (str): + Required. The name of the BigQuery export to delete. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteBigQueryExportRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.DeleteBigQueryExportRequest): + request = securitycenter_service.DeleteBigQueryExportRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_big_query_export] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def update_big_query_export(self, + request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, + *, + big_query_export: Optional[bigquery_export.BigQueryExport] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> bigquery_export.BigQueryExport: + r"""Updates a BigQuery export. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateBigQueryExportRequest( + ) + + # Make the request + response = client.update_big_query_export(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]): + The request object. Request message for updating a + BigQuery export. + big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): + Required. The BigQuery export being + updated. + + This corresponds to the ``big_query_export`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to be updated. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([big_query_export, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateBigQueryExportRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateBigQueryExportRequest): + request = securitycenter_service.UpdateBigQueryExportRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if big_query_export is not None: + request.big_query_export = big_query_export + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_big_query_export] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("big_query_export.name", request.big_query_export.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_big_query_exports(self, + request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListBigQueryExportsPager: + r"""Lists BigQuery exports. Note that when requesting + BigQuery exports at a given level all exports under that + level are also returned e.g. if requesting BigQuery + exports under a folder, then all BigQuery exports + immediately under the folder plus the ones created under + the projects within the folder are returned. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_big_query_exports(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListBigQueryExportsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_big_query_exports(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]): + The request object. Request message for listing BigQuery + exports at a given scope e.g. + organization, folder or project. + parent (str): + Required. The parent, which owns the collection of + BigQuery exports. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager: + Response message for listing BigQuery + exports. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListBigQueryExportsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListBigQueryExportsRequest): + request = securitycenter_service.ListBigQueryExportsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_big_query_exports] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListBigQueryExportsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "SecurityCenterClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + def list_operations( + self, + request: Optional[operations_pb2.ListOperationsRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operations_pb2.ListOperationsResponse: + r"""Lists operations that match the specified filter in the request. + + Args: + request (:class:`~.operations_pb2.ListOperationsRequest`): + The request object. Request message for + `ListOperations` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + ~.operations_pb2.ListOperationsResponse: + Response message for ``ListOperations`` method. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.ListOperationsRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._transport.list_operations, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def get_operation( + self, + request: Optional[operations_pb2.GetOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operations_pb2.Operation: + r"""Gets the latest state of a long-running operation. + + Args: + request (:class:`~.operations_pb2.GetOperationRequest`): + The request object. Request message for + `GetOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + ~.operations_pb2.Operation: + An ``Operation`` object. + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.GetOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._transport.get_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, retry=retry, timeout=timeout, metadata=metadata,) + + # Done; return the response. + return response + + def delete_operation( + self, + request: Optional[operations_pb2.DeleteOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a long-running operation. + + This method indicates that the client is no longer interested + in the operation result. It does not cancel the operation. + If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.DeleteOperationRequest`): + The request object. Request message for + `DeleteOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.DeleteOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._transport.delete_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + def cancel_operation( + self, + request: Optional[operations_pb2.CancelOperationRequest] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Starts asynchronous cancellation on a long-running operation. + + The server makes a best effort to cancel the operation, but success + is not guaranteed. If the server doesn't support this method, it returns + `google.rpc.Code.UNIMPLEMENTED`. + + Args: + request (:class:`~.operations_pb2.CancelOperationRequest`): + The request object. Request message for + `CancelOperation` method. + retry (google.api_core.retry.Retry): Designation of what errors, + if any, should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + Returns: + None + """ + # Create or coerce a protobuf request object. + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = operations_pb2.CancelOperationRequest(**request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method.wrap_method( + self._transport.cancel_operation, + default_timeout=None, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + (("name", request.name),)), + ) + + # Send the request. + rpc(request, retry=retry, timeout=timeout, metadata=metadata,) + + + + + + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterClient", +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py new file mode 100644 index 00000000..14121825 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py @@ -0,0 +1,1355 @@ +# -*- 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. +# +from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator + +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source + + +class GroupAssetsPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupAssetsResponse], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupAssetsAsyncPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupFindingsResponse], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsAsyncPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListAssetsResponse], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + for page in self.pages: + yield from page.list_assets_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsAsyncPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + async def async_generator(): + async for page in self.pages: + for response in page.list_assets_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``list_findings_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``list_findings_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListFindingsResponse], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: + for page in self.pages: + yield from page.list_findings_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsAsyncPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``list_findings_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``list_findings_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: + async def async_generator(): + async for page in self.pages: + for response in page.list_findings_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListMuteConfigsPager: + """A pager for iterating through ``list_mute_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``mute_configs`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListMuteConfigs`` requests and continue to iterate + through the ``mute_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListMuteConfigsResponse], + request: securitycenter_service.ListMuteConfigsRequest, + response: securitycenter_service.ListMuteConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListMuteConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListMuteConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[mute_config.MuteConfig]: + for page in self.pages: + yield from page.mute_configs + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListMuteConfigsAsyncPager: + """A pager for iterating through ``list_mute_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``mute_configs`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListMuteConfigs`` requests and continue to iterate + through the ``mute_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListMuteConfigsResponse]], + request: securitycenter_service.ListMuteConfigsRequest, + response: securitycenter_service.ListMuteConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListMuteConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListMuteConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[mute_config.MuteConfig]: + async def async_generator(): + async for page in self.pages: + for response in page.mute_configs: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListNotificationConfigsPager: + """A pager for iterating through ``list_notification_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``notification_configs`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListNotificationConfigs`` requests and continue to iterate + through the ``notification_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], + request: securitycenter_service.ListNotificationConfigsRequest, + response: securitycenter_service.ListNotificationConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListNotificationConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[notification_config.NotificationConfig]: + for page in self.pages: + yield from page.notification_configs + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListNotificationConfigsAsyncPager: + """A pager for iterating through ``list_notification_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``notification_configs`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListNotificationConfigs`` requests and continue to iterate + through the ``notification_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], + request: securitycenter_service.ListNotificationConfigsRequest, + response: securitycenter_service.ListNotificationConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListNotificationConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: + async def async_generator(): + async for page in self.pages: + for response in page.notification_configs: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: + for page in self.pages: + yield from page.effective_security_health_analytics_custom_modules + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: + async def async_generator(): + async for page in self.pages: + for response in page.effective_security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListSourcesResponse], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[source.Source]: + for page in self.pages: + yield from page.sources + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesAsyncPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[source.Source]: + async def async_generator(): + async for page in self.pages: + for response in page.sources: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListBigQueryExportsPager: + """A pager for iterating through ``list_big_query_exports`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``big_query_exports`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListBigQueryExports`` requests and continue to iterate + through the ``big_query_exports`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListBigQueryExportsResponse], + request: securitycenter_service.ListBigQueryExportsRequest, + response: securitycenter_service.ListBigQueryExportsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListBigQueryExportsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListBigQueryExportsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[bigquery_export.BigQueryExport]: + for page in self.pages: + yield from page.big_query_exports + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListBigQueryExportsAsyncPager: + """A pager for iterating through ``list_big_query_exports`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``big_query_exports`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListBigQueryExports`` requests and continue to iterate + through the ``big_query_exports`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListBigQueryExportsResponse]], + request: securitycenter_service.ListBigQueryExportsRequest, + response: securitycenter_service.ListBigQueryExportsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListBigQueryExportsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListBigQueryExportsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[bigquery_export.BigQueryExport]: + async def async_generator(): + async for page in self.pages: + for response in page.big_query_exports: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py new file mode 100644 index 00000000..be15b558 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py @@ -0,0 +1,38 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import SecurityCenterTransport +from .grpc import SecurityCenterGrpcTransport +from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .rest import SecurityCenterRestTransport +from .rest import SecurityCenterRestInterceptor + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] +_transport_registry['grpc'] = SecurityCenterGrpcTransport +_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport +_transport_registry['rest'] = SecurityCenterRestTransport + +__all__ = ( + 'SecurityCenterTransport', + 'SecurityCenterGrpcTransport', + 'SecurityCenterGrpcAsyncIOTransport', + 'SecurityCenterRestTransport', + 'SecurityCenterRestInterceptor', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py new file mode 100644 index 00000000..96f2f1cd --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py @@ -0,0 +1,925 @@ +# -*- 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +from google.cloud.securitycenter_v1 import gapic_version as package_version + +import google.auth # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +class SecurityCenterTransport(abc.ABC): + """Abstract transport class for SecurityCenter.""" + + AUTH_SCOPES = ( + 'https://www.googleapis.com/auth/cloud-platform', + ) + + DEFAULT_HOST: str = 'securitycenter.googleapis.com' + def __init__( + self, *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + **scopes_kwargs, + quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience(api_audience if api_audience else host) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ':' not in host: + host += ':443' + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.bulk_mute_findings: gapic_v1.method.wrap_method( + self.bulk_mute_findings, + default_timeout=None, + client_info=client_info, + ), + self.create_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), + self.create_source: gapic_v1.method.wrap_method( + self.create_source, + default_timeout=60.0, + client_info=client_info, + ), + self.create_finding: gapic_v1.method.wrap_method( + self.create_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.create_mute_config: gapic_v1.method.wrap_method( + self.create_mute_config, + default_timeout=None, + client_info=client_info, + ), + self.create_notification_config: gapic_v1.method.wrap_method( + self.create_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.delete_mute_config: gapic_v1.method.wrap_method( + self.delete_mute_config, + default_timeout=None, + client_info=client_info, + ), + self.delete_notification_config: gapic_v1.method.wrap_method( + self.delete_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.delete_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), + self.get_big_query_export: gapic_v1.method.wrap_method( + self.get_big_query_export, + default_timeout=None, + client_info=client_info, + ), + self.get_iam_policy: gapic_v1.method.wrap_method( + self.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_mute_config: gapic_v1.method.wrap_method( + self.get_mute_config, + default_timeout=None, + client_info=client_info, + ), + self.get_notification_config: gapic_v1.method.wrap_method( + self.get_notification_config, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_organization_settings: gapic_v1.method.wrap_method( + self.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_effective_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_effective_security_health_analytics_custom_module, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_security_health_analytics_custom_module, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_source: gapic_v1.method.wrap_method( + self.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.group_assets: gapic_v1.method.wrap_method( + self.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.group_findings: gapic_v1.method.wrap_method( + self.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_assets: gapic_v1.method.wrap_method( + self.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_descendant_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_findings: gapic_v1.method.wrap_method( + self.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_mute_configs: gapic_v1.method.wrap_method( + self.list_mute_configs, + default_timeout=None, + client_info=client_info, + ), + self.list_notification_configs: gapic_v1.method.wrap_method( + self.list_notification_configs, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_effective_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_security_health_analytics_custom_modules, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_sources: gapic_v1.method.wrap_method( + self.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.run_asset_discovery: gapic_v1.method.wrap_method( + self.run_asset_discovery, + default_timeout=60.0, + client_info=client_info, + ), + self.set_finding_state: gapic_v1.method.wrap_method( + self.set_finding_state, + default_timeout=60.0, + client_info=client_info, + ), + self.set_mute: gapic_v1.method.wrap_method( + self.set_mute, + default_timeout=None, + client_info=client_info, + ), + self.set_iam_policy: gapic_v1.method.wrap_method( + self.set_iam_policy, + default_timeout=60.0, + client_info=client_info, + ), + self.test_iam_permissions: gapic_v1.method.wrap_method( + self.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.update_external_system: gapic_v1.method.wrap_method( + self.update_external_system, + default_timeout=None, + client_info=client_info, + ), + self.update_finding: gapic_v1.method.wrap_method( + self.update_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.update_mute_config: gapic_v1.method.wrap_method( + self.update_mute_config, + default_timeout=None, + client_info=client_info, + ), + self.update_notification_config: gapic_v1.method.wrap_method( + self.update_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.update_organization_settings: gapic_v1.method.wrap_method( + self.update_organization_settings, + default_timeout=60.0, + client_info=client_info, + ), + self.update_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), + self.update_source: gapic_v1.method.wrap_method( + self.update_source, + default_timeout=60.0, + client_info=client_info, + ), + self.update_security_marks: gapic_v1.method.wrap_method( + self.update_security_marks, + default_timeout=480.0, + client_info=client_info, + ), + self.create_big_query_export: gapic_v1.method.wrap_method( + self.create_big_query_export, + default_timeout=None, + client_info=client_info, + ), + self.delete_big_query_export: gapic_v1.method.wrap_method( + self.delete_big_query_export, + default_timeout=None, + client_info=client_info, + ), + self.update_big_query_export: gapic_v1.method.wrap_method( + self.update_big_query_export, + default_timeout=None, + client_info=client_info, + ), + self.list_big_query_exports: gapic_v1.method.wrap_method( + self.list_big_query_exports, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def bulk_mute_findings(self) -> Callable[ + [securitycenter_service.BulkMuteFindingsRequest], + Union[ + operations_pb2.Operation, + Awaitable[operations_pb2.Operation] + ]]: + raise NotImplementedError() + + @property + def create_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] + ]]: + raise NotImplementedError() + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def create_mute_config(self) -> Callable[ + [securitycenter_service.CreateMuteConfigRequest], + Union[ + gcs_mute_config.MuteConfig, + Awaitable[gcs_mute_config.MuteConfig] + ]]: + raise NotImplementedError() + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + Union[ + gcs_notification_config.NotificationConfig, + Awaitable[gcs_notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def delete_mute_config(self) -> Callable[ + [securitycenter_service.DeleteMuteConfigRequest], + Union[ + empty_pb2.Empty, + Awaitable[empty_pb2.Empty] + ]]: + raise NotImplementedError() + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + Union[ + empty_pb2.Empty, + Awaitable[empty_pb2.Empty] + ]]: + raise NotImplementedError() + + @property + def delete_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Union[ + empty_pb2.Empty, + Awaitable[empty_pb2.Empty] + ]]: + raise NotImplementedError() + + @property + def get_big_query_export(self) -> Callable[ + [securitycenter_service.GetBigQueryExportRequest], + Union[ + bigquery_export.BigQueryExport, + Awaitable[bigquery_export.BigQueryExport] + ]]: + raise NotImplementedError() + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def get_mute_config(self) -> Callable[ + [securitycenter_service.GetMuteConfigRequest], + Union[ + mute_config.MuteConfig, + Awaitable[mute_config.MuteConfig] + ]]: + raise NotImplementedError() + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + Union[ + notification_config.NotificationConfig, + Awaitable[notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Union[ + organization_settings.OrganizationSettings, + Awaitable[organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def get_effective_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Union[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] + ]]: + raise NotImplementedError() + + @property + def get_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Union[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] + ]]: + raise NotImplementedError() + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Union[ + source.Source, + Awaitable[source.Source] + ]]: + raise NotImplementedError() + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Union[ + securitycenter_service.GroupAssetsResponse, + Awaitable[securitycenter_service.GroupAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Union[ + securitycenter_service.GroupFindingsResponse, + Awaitable[securitycenter_service.GroupFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Union[ + securitycenter_service.ListAssetsResponse, + Awaitable[securitycenter_service.ListAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse] + ]]: + raise NotImplementedError() + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Union[ + securitycenter_service.ListFindingsResponse, + Awaitable[securitycenter_service.ListFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_mute_configs(self) -> Callable[ + [securitycenter_service.ListMuteConfigsRequest], + Union[ + securitycenter_service.ListMuteConfigsResponse, + Awaitable[securitycenter_service.ListMuteConfigsResponse] + ]]: + raise NotImplementedError() + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + Union[ + securitycenter_service.ListNotificationConfigsResponse, + Awaitable[securitycenter_service.ListNotificationConfigsResponse] + ]]: + raise NotImplementedError() + + @property + def list_effective_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse] + ]]: + raise NotImplementedError() + + @property + def list_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse] + ]]: + raise NotImplementedError() + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Union[ + securitycenter_service.ListSourcesResponse, + Awaitable[securitycenter_service.ListSourcesResponse] + ]]: + raise NotImplementedError() + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Union[ + operations_pb2.Operation, + Awaitable[operations_pb2.Operation] + ]]: + raise NotImplementedError() + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Union[ + finding.Finding, + Awaitable[finding.Finding] + ]]: + raise NotImplementedError() + + @property + def set_mute(self) -> Callable[ + [securitycenter_service.SetMuteRequest], + Union[ + finding.Finding, + Awaitable[finding.Finding] + ]]: + raise NotImplementedError() + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Union[ + iam_policy_pb2.TestIamPermissionsResponse, + Awaitable[iam_policy_pb2.TestIamPermissionsResponse] + ]]: + raise NotImplementedError() + + @property + def update_external_system(self) -> Callable[ + [securitycenter_service.UpdateExternalSystemRequest], + Union[ + gcs_external_system.ExternalSystem, + Awaitable[gcs_external_system.ExternalSystem] + ]]: + raise NotImplementedError() + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def update_mute_config(self) -> Callable[ + [securitycenter_service.UpdateMuteConfigRequest], + Union[ + gcs_mute_config.MuteConfig, + Awaitable[gcs_mute_config.MuteConfig] + ]]: + raise NotImplementedError() + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + Union[ + gcs_notification_config.NotificationConfig, + Awaitable[gcs_notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Union[ + gcs_organization_settings.OrganizationSettings, + Awaitable[gcs_organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def update_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] + ]]: + raise NotImplementedError() + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Union[ + gcs_security_marks.SecurityMarks, + Awaitable[gcs_security_marks.SecurityMarks] + ]]: + raise NotImplementedError() + + @property + def create_big_query_export(self) -> Callable[ + [securitycenter_service.CreateBigQueryExportRequest], + Union[ + bigquery_export.BigQueryExport, + Awaitable[bigquery_export.BigQueryExport] + ]]: + raise NotImplementedError() + + @property + def delete_big_query_export(self) -> Callable[ + [securitycenter_service.DeleteBigQueryExportRequest], + Union[ + empty_pb2.Empty, + Awaitable[empty_pb2.Empty] + ]]: + raise NotImplementedError() + + @property + def update_big_query_export(self) -> Callable[ + [securitycenter_service.UpdateBigQueryExportRequest], + Union[ + bigquery_export.BigQueryExport, + Awaitable[bigquery_export.BigQueryExport] + ]]: + raise NotImplementedError() + + @property + def list_big_query_exports(self) -> Callable[ + [securitycenter_service.ListBigQueryExportsRequest], + Union[ + securitycenter_service.ListBigQueryExportsResponse, + Awaitable[securitycenter_service.ListBigQueryExportsResponse] + ]]: + raise NotImplementedError() + + @property + def list_operations( + self, + ) -> Callable[ + [operations_pb2.ListOperationsRequest], + Union[operations_pb2.ListOperationsResponse, Awaitable[operations_pb2.ListOperationsResponse]], + ]: + raise NotImplementedError() + + @property + def get_operation( + self, + ) -> Callable[ + [operations_pb2.GetOperationRequest], + Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], + ]: + raise NotImplementedError() + + @property + def cancel_operation( + self, + ) -> Callable[ + [operations_pb2.CancelOperationRequest], + None, + ]: + raise NotImplementedError() + + @property + def delete_operation( + self, + ) -> Callable[ + [operations_pb2.DeleteOperationRequest], + None, + ]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ( + 'SecurityCenterTransport', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py new file mode 100644 index 00000000..6864d7f9 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py @@ -0,0 +1,1555 @@ +# -*- 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 warnings +from typing import Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import grpc_helpers +from google.api_core import operations_v1 +from google.api_core import gapic_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore + +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO + + +class SecurityCenterGrpcTransport(SecurityCenterTransport): + """gRPC backend transport for SecurityCenter. + + V1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + _stubs: Dict[str, Callable] + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service. + """ + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def bulk_mute_findings(self) -> Callable[ + [securitycenter_service.BulkMuteFindingsRequest], + operations_pb2.Operation]: + r"""Return a callable for the bulk mute findings method over gRPC. + + Kicks off an LRO to bulk mute findings for a parent + based on a filter. The parent can be either an + organization, folder or project. The findings matched by + the filter will be muted after the LRO is done. + + Returns: + Callable[[~.BulkMuteFindingsRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'bulk_mute_findings' not in self._stubs: + self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', + request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['bulk_mute_findings'] + + @property + def create_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_security_health_analytics_custom_module' not in self._stubs: + self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['create_security_health_analytics_custom_module'] + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def create_mute_config(self) -> Callable[ + [securitycenter_service.CreateMuteConfigRequest], + gcs_mute_config.MuteConfig]: + r"""Return a callable for the create mute config method over gRPC. + + Creates a mute config. + + Returns: + Callable[[~.CreateMuteConfigRequest], + ~.MuteConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_mute_config' not in self._stubs: + self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', + request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, + response_deserializer=gcs_mute_config.MuteConfig.deserialize, + ) + return self._stubs['create_mute_config'] + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + r"""Return a callable for the create notification config method over gRPC. + + Creates a notification config. + + Returns: + Callable[[~.CreateNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_notification_config' not in self._stubs: + self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', + request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['create_notification_config'] + + @property + def delete_mute_config(self) -> Callable[ + [securitycenter_service.DeleteMuteConfigRequest], + empty_pb2.Empty]: + r"""Return a callable for the delete mute config method over gRPC. + + Deletes an existing mute config. + + Returns: + Callable[[~.DeleteMuteConfigRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_mute_config' not in self._stubs: + self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', + request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_mute_config'] + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + empty_pb2.Empty]: + r"""Return a callable for the delete notification config method over gRPC. + + Deletes a notification config. + + Returns: + Callable[[~.DeleteNotificationConfigRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_notification_config' not in self._stubs: + self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', + request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_notification_config'] + + @property + def delete_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_security_health_analytics_custom_module' not in self._stubs: + self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_security_health_analytics_custom_module'] + + @property + def get_big_query_export(self) -> Callable[ + [securitycenter_service.GetBigQueryExportRequest], + bigquery_export.BigQueryExport]: + r"""Return a callable for the get big query export method over gRPC. + + Gets a BigQuery export. + + Returns: + Callable[[~.GetBigQueryExportRequest], + ~.BigQueryExport]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_big_query_export' not in self._stubs: + self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', + request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['get_big_query_export'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_mute_config(self) -> Callable[ + [securitycenter_service.GetMuteConfigRequest], + mute_config.MuteConfig]: + r"""Return a callable for the get mute config method over gRPC. + + Gets a mute config. + + Returns: + Callable[[~.GetMuteConfigRequest], + ~.MuteConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_mute_config' not in self._stubs: + self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', + request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, + response_deserializer=mute_config.MuteConfig.deserialize, + ) + return self._stubs['get_mute_config'] + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + notification_config.NotificationConfig]: + r"""Return a callable for the get notification config method over gRPC. + + Gets a notification config. + + Returns: + Callable[[~.GetNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_notification_config' not in self._stubs: + self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', + request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, + response_deserializer=notification_config.NotificationConfig.deserialize, + ) + return self._stubs['get_notification_config'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_effective_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + ~.EffectiveSecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_effective_security_health_analytics_custom_module' not in self._stubs: + self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['get_effective_security_health_analytics_custom_module'] + + @property + def get_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_security_health_analytics_custom_module' not in self._stubs: + self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['get_security_health_analytics_custom_module'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + ~.GroupAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + ~.GroupFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + ~.ListAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + ~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_descendant_security_health_analytics_custom_modules'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + ~.ListFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_mute_configs(self) -> Callable[ + [securitycenter_service.ListMuteConfigsRequest], + securitycenter_service.ListMuteConfigsResponse]: + r"""Return a callable for the list mute configs method over gRPC. + + Lists mute configs. + + Returns: + Callable[[~.ListMuteConfigsRequest], + ~.ListMuteConfigsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_mute_configs' not in self._stubs: + self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', + request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, + ) + return self._stubs['list_mute_configs'] + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + securitycenter_service.ListNotificationConfigsResponse]: + r"""Return a callable for the list notification configs method over gRPC. + + Lists notification configs. + + Returns: + Callable[[~.ListNotificationConfigsRequest], + ~.ListNotificationConfigsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_notification_configs' not in self._stubs: + self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', + request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, + ) + return self._stubs['list_notification_configs'] + + @property + def list_effective_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + ~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_effective_security_health_analytics_custom_modules'] + + @property + def list_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + ~.ListSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_security_health_analytics_custom_modules'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + ~.ListSourcesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_mute(self) -> Callable[ + [securitycenter_service.SetMuteRequest], + finding.Finding]: + r"""Return a callable for the set mute method over gRPC. + + Updates the mute state of a finding. + + Returns: + Callable[[~.SetMuteRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_mute' not in self._stubs: + self._stubs['set_mute'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', + request_serializer=securitycenter_service.SetMuteRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_mute'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + ~.TestIamPermissionsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_external_system(self) -> Callable[ + [securitycenter_service.UpdateExternalSystemRequest], + gcs_external_system.ExternalSystem]: + r"""Return a callable for the update external system method over gRPC. + + Updates external system. This is for a given finding. + + Returns: + Callable[[~.UpdateExternalSystemRequest], + ~.ExternalSystem]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_external_system' not in self._stubs: + self._stubs['update_external_system'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', + request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, + response_deserializer=gcs_external_system.ExternalSystem.deserialize, + ) + return self._stubs['update_external_system'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_mute_config(self) -> Callable[ + [securitycenter_service.UpdateMuteConfigRequest], + gcs_mute_config.MuteConfig]: + r"""Return a callable for the update mute config method over gRPC. + + Updates a mute config. + + Returns: + Callable[[~.UpdateMuteConfigRequest], + ~.MuteConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_mute_config' not in self._stubs: + self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', + request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, + response_deserializer=gcs_mute_config.MuteConfig.deserialize, + ) + return self._stubs['update_mute_config'] + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + r"""Return a callable for the update notification config method over gRPC. + + Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + Returns: + Callable[[~.UpdateNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_notification_config' not in self._stubs: + self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', + request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['update_notification_config'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_health_analytics_custom_module' not in self._stubs: + self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['update_security_health_analytics_custom_module'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + ~.SecurityMarks]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + @property + def create_big_query_export(self) -> Callable[ + [securitycenter_service.CreateBigQueryExportRequest], + bigquery_export.BigQueryExport]: + r"""Return a callable for the create big query export method over gRPC. + + Creates a BigQuery export. + + Returns: + Callable[[~.CreateBigQueryExportRequest], + ~.BigQueryExport]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_big_query_export' not in self._stubs: + self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', + request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['create_big_query_export'] + + @property + def delete_big_query_export(self) -> Callable[ + [securitycenter_service.DeleteBigQueryExportRequest], + empty_pb2.Empty]: + r"""Return a callable for the delete big query export method over gRPC. + + Deletes an existing BigQuery export. + + Returns: + Callable[[~.DeleteBigQueryExportRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_big_query_export' not in self._stubs: + self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', + request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_big_query_export'] + + @property + def update_big_query_export(self) -> Callable[ + [securitycenter_service.UpdateBigQueryExportRequest], + bigquery_export.BigQueryExport]: + r"""Return a callable for the update big query export method over gRPC. + + Updates a BigQuery export. + + Returns: + Callable[[~.UpdateBigQueryExportRequest], + ~.BigQueryExport]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_big_query_export' not in self._stubs: + self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', + request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['update_big_query_export'] + + @property + def list_big_query_exports(self) -> Callable[ + [securitycenter_service.ListBigQueryExportsRequest], + securitycenter_service.ListBigQueryExportsResponse]: + r"""Return a callable for the list big query exports method over gRPC. + + Lists BigQuery exports. Note that when requesting + BigQuery exports at a given level all exports under that + level are also returned e.g. if requesting BigQuery + exports under a folder, then all BigQuery exports + immediately under the folder plus the ones created under + the projects within the folder are returned. + + Returns: + Callable[[~.ListBigQueryExportsRequest], + ~.ListBigQueryExportsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_big_query_exports' not in self._stubs: + self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', + request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, + response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, + ) + return self._stubs['list_big_query_exports'] + + def close(self): + self.grpc_channel.close() + + @property + def delete_operation( + self, + ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: + r"""Return a callable for the delete_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_operation" not in self._stubs: + self._stubs["delete_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/DeleteOperation", + request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, + response_deserializer=None, + ) + return self._stubs["delete_operation"] + + @property + def cancel_operation( + self, + ) -> Callable[[operations_pb2.CancelOperationRequest], None]: + r"""Return a callable for the cancel_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "cancel_operation" not in self._stubs: + self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/CancelOperation", + request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, + response_deserializer=None, + ) + return self._stubs["cancel_operation"] + + @property + def get_operation( + self, + ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: + r"""Return a callable for the get_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_operation" not in self._stubs: + self._stubs["get_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/GetOperation", + request_serializer=operations_pb2.GetOperationRequest.SerializeToString, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["get_operation"] + + @property + def list_operations( + self, + ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: + r"""Return a callable for the list_operations method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_operations" not in self._stubs: + self._stubs["list_operations"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/ListOperations", + request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, + response_deserializer=operations_pb2.ListOperationsResponse.FromString, + ) + return self._stubs["list_operations"] + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ( + 'SecurityCenterGrpcTransport', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py new file mode 100644 index 00000000..8fa655b4 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py @@ -0,0 +1,1554 @@ +# -*- 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 warnings +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .grpc import SecurityCenterGrpcTransport + + +class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): + """gRPC AsyncIO backend transport for SecurityCenter. + + V1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def bulk_mute_findings(self) -> Callable[ + [securitycenter_service.BulkMuteFindingsRequest], + Awaitable[operations_pb2.Operation]]: + r"""Return a callable for the bulk mute findings method over gRPC. + + Kicks off an LRO to bulk mute findings for a parent + based on a filter. The parent can be either an + organization, folder or project. The findings matched by + the filter will be muted after the LRO is done. + + Returns: + Callable[[~.BulkMuteFindingsRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'bulk_mute_findings' not in self._stubs: + self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', + request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['bulk_mute_findings'] + + @property + def create_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_security_health_analytics_custom_module' not in self._stubs: + self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['create_security_health_analytics_custom_module'] + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def create_mute_config(self) -> Callable[ + [securitycenter_service.CreateMuteConfigRequest], + Awaitable[gcs_mute_config.MuteConfig]]: + r"""Return a callable for the create mute config method over gRPC. + + Creates a mute config. + + Returns: + Callable[[~.CreateMuteConfigRequest], + Awaitable[~.MuteConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_mute_config' not in self._stubs: + self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', + request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, + response_deserializer=gcs_mute_config.MuteConfig.deserialize, + ) + return self._stubs['create_mute_config'] + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + Awaitable[gcs_notification_config.NotificationConfig]]: + r"""Return a callable for the create notification config method over gRPC. + + Creates a notification config. + + Returns: + Callable[[~.CreateNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_notification_config' not in self._stubs: + self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', + request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['create_notification_config'] + + @property + def delete_mute_config(self) -> Callable[ + [securitycenter_service.DeleteMuteConfigRequest], + Awaitable[empty_pb2.Empty]]: + r"""Return a callable for the delete mute config method over gRPC. + + Deletes an existing mute config. + + Returns: + Callable[[~.DeleteMuteConfigRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_mute_config' not in self._stubs: + self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', + request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_mute_config'] + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + Awaitable[empty_pb2.Empty]]: + r"""Return a callable for the delete notification config method over gRPC. + + Deletes a notification config. + + Returns: + Callable[[~.DeleteNotificationConfigRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_notification_config' not in self._stubs: + self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', + request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_notification_config'] + + @property + def delete_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[empty_pb2.Empty]]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_security_health_analytics_custom_module' not in self._stubs: + self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_security_health_analytics_custom_module'] + + @property + def get_big_query_export(self) -> Callable[ + [securitycenter_service.GetBigQueryExportRequest], + Awaitable[bigquery_export.BigQueryExport]]: + r"""Return a callable for the get big query export method over gRPC. + + Gets a BigQuery export. + + Returns: + Callable[[~.GetBigQueryExportRequest], + Awaitable[~.BigQueryExport]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_big_query_export' not in self._stubs: + self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', + request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['get_big_query_export'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_mute_config(self) -> Callable[ + [securitycenter_service.GetMuteConfigRequest], + Awaitable[mute_config.MuteConfig]]: + r"""Return a callable for the get mute config method over gRPC. + + Gets a mute config. + + Returns: + Callable[[~.GetMuteConfigRequest], + Awaitable[~.MuteConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_mute_config' not in self._stubs: + self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', + request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, + response_deserializer=mute_config.MuteConfig.deserialize, + ) + return self._stubs['get_mute_config'] + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + Awaitable[notification_config.NotificationConfig]]: + r"""Return a callable for the get notification config method over gRPC. + + Gets a notification config. + + Returns: + Callable[[~.GetNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_notification_config' not in self._stubs: + self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', + request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, + response_deserializer=notification_config.NotificationConfig.deserialize, + ) + return self._stubs['get_notification_config'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Awaitable[organization_settings.OrganizationSettings]]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_effective_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.EffectiveSecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_effective_security_health_analytics_custom_module' not in self._stubs: + self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['get_effective_security_health_analytics_custom_module'] + + @property + def get_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_security_health_analytics_custom_module' not in self._stubs: + self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['get_security_health_analytics_custom_module'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Awaitable[source.Source]]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Awaitable[securitycenter_service.GroupAssetsResponse]]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + Awaitable[~.GroupAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Awaitable[securitycenter_service.GroupFindingsResponse]]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + Awaitable[~.GroupFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Awaitable[securitycenter_service.ListAssetsResponse]]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + Awaitable[~.ListAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_descendant_security_health_analytics_custom_modules'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Awaitable[securitycenter_service.ListFindingsResponse]]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + Awaitable[~.ListFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_mute_configs(self) -> Callable[ + [securitycenter_service.ListMuteConfigsRequest], + Awaitable[securitycenter_service.ListMuteConfigsResponse]]: + r"""Return a callable for the list mute configs method over gRPC. + + Lists mute configs. + + Returns: + Callable[[~.ListMuteConfigsRequest], + Awaitable[~.ListMuteConfigsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_mute_configs' not in self._stubs: + self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', + request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, + ) + return self._stubs['list_mute_configs'] + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: + r"""Return a callable for the list notification configs method over gRPC. + + Lists notification configs. + + Returns: + Callable[[~.ListNotificationConfigsRequest], + Awaitable[~.ListNotificationConfigsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_notification_configs' not in self._stubs: + self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', + request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, + ) + return self._stubs['list_notification_configs'] + + @property + def list_effective_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_effective_security_health_analytics_custom_modules'] + + @property + def list_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_security_health_analytics_custom_modules' not in self._stubs: + self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs['list_security_health_analytics_custom_modules'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Awaitable[securitycenter_service.ListSourcesResponse]]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + Awaitable[~.ListSourcesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Awaitable[operations_pb2.Operation]]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Awaitable[finding.Finding]]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_mute(self) -> Callable[ + [securitycenter_service.SetMuteRequest], + Awaitable[finding.Finding]]: + r"""Return a callable for the set mute method over gRPC. + + Updates the mute state of a finding. + + Returns: + Callable[[~.SetMuteRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_mute' not in self._stubs: + self._stubs['set_mute'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', + request_serializer=securitycenter_service.SetMuteRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_mute'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + Awaitable[~.TestIamPermissionsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_external_system(self) -> Callable[ + [securitycenter_service.UpdateExternalSystemRequest], + Awaitable[gcs_external_system.ExternalSystem]]: + r"""Return a callable for the update external system method over gRPC. + + Updates external system. This is for a given finding. + + Returns: + Callable[[~.UpdateExternalSystemRequest], + Awaitable[~.ExternalSystem]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_external_system' not in self._stubs: + self._stubs['update_external_system'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', + request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, + response_deserializer=gcs_external_system.ExternalSystem.deserialize, + ) + return self._stubs['update_external_system'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_mute_config(self) -> Callable[ + [securitycenter_service.UpdateMuteConfigRequest], + Awaitable[gcs_mute_config.MuteConfig]]: + r"""Return a callable for the update mute config method over gRPC. + + Updates a mute config. + + Returns: + Callable[[~.UpdateMuteConfigRequest], + Awaitable[~.MuteConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_mute_config' not in self._stubs: + self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', + request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, + response_deserializer=gcs_mute_config.MuteConfig.deserialize, + ) + return self._stubs['update_mute_config'] + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + Awaitable[gcs_notification_config.NotificationConfig]]: + r"""Return a callable for the update notification config method over gRPC. + + Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + Returns: + Callable[[~.UpdateNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_notification_config' not in self._stubs: + self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', + request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['update_notification_config'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Awaitable[gcs_organization_settings.OrganizationSettings]]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_health_analytics_custom_module' not in self._stubs: + self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs['update_security_health_analytics_custom_module'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Awaitable[gcs_security_marks.SecurityMarks]]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + Awaitable[~.SecurityMarks]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + @property + def create_big_query_export(self) -> Callable[ + [securitycenter_service.CreateBigQueryExportRequest], + Awaitable[bigquery_export.BigQueryExport]]: + r"""Return a callable for the create big query export method over gRPC. + + Creates a BigQuery export. + + Returns: + Callable[[~.CreateBigQueryExportRequest], + Awaitable[~.BigQueryExport]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_big_query_export' not in self._stubs: + self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', + request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['create_big_query_export'] + + @property + def delete_big_query_export(self) -> Callable[ + [securitycenter_service.DeleteBigQueryExportRequest], + Awaitable[empty_pb2.Empty]]: + r"""Return a callable for the delete big query export method over gRPC. + + Deletes an existing BigQuery export. + + Returns: + Callable[[~.DeleteBigQueryExportRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_big_query_export' not in self._stubs: + self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', + request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_big_query_export'] + + @property + def update_big_query_export(self) -> Callable[ + [securitycenter_service.UpdateBigQueryExportRequest], + Awaitable[bigquery_export.BigQueryExport]]: + r"""Return a callable for the update big query export method over gRPC. + + Updates a BigQuery export. + + Returns: + Callable[[~.UpdateBigQueryExportRequest], + Awaitable[~.BigQueryExport]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_big_query_export' not in self._stubs: + self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', + request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, + response_deserializer=bigquery_export.BigQueryExport.deserialize, + ) + return self._stubs['update_big_query_export'] + + @property + def list_big_query_exports(self) -> Callable[ + [securitycenter_service.ListBigQueryExportsRequest], + Awaitable[securitycenter_service.ListBigQueryExportsResponse]]: + r"""Return a callable for the list big query exports method over gRPC. + + Lists BigQuery exports. Note that when requesting + BigQuery exports at a given level all exports under that + level are also returned e.g. if requesting BigQuery + exports under a folder, then all BigQuery exports + immediately under the folder plus the ones created under + the projects within the folder are returned. + + Returns: + Callable[[~.ListBigQueryExportsRequest], + Awaitable[~.ListBigQueryExportsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_big_query_exports' not in self._stubs: + self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', + request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, + response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, + ) + return self._stubs['list_big_query_exports'] + + def close(self): + return self.grpc_channel.close() + + @property + def delete_operation( + self, + ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: + r"""Return a callable for the delete_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_operation" not in self._stubs: + self._stubs["delete_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/DeleteOperation", + request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, + response_deserializer=None, + ) + return self._stubs["delete_operation"] + + @property + def cancel_operation( + self, + ) -> Callable[[operations_pb2.CancelOperationRequest], None]: + r"""Return a callable for the cancel_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "cancel_operation" not in self._stubs: + self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/CancelOperation", + request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, + response_deserializer=None, + ) + return self._stubs["cancel_operation"] + + @property + def get_operation( + self, + ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: + r"""Return a callable for the get_operation method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_operation" not in self._stubs: + self._stubs["get_operation"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/GetOperation", + request_serializer=operations_pb2.GetOperationRequest.SerializeToString, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs["get_operation"] + + @property + def list_operations( + self, + ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: + r"""Return a callable for the list_operations method over gRPC. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_operations" not in self._stubs: + self._stubs["list_operations"] = self.grpc_channel.unary_unary( + "/google.longrunning.Operations/ListOperations", + request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, + response_deserializer=operations_pb2.ListOperationsResponse.FromString, + ) + return self._stubs["list_operations"] + + +__all__ = ( + 'SecurityCenterGrpcAsyncIOTransport', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py new file mode 100644 index 00000000..d1aad202 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py @@ -0,0 +1,6237 @@ +# -*- 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. +# + +from google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from google.api_core import operations_v1 +from google.longrunning import operations_pb2 +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore + +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class SecurityCenterRestInterceptor: + """Interceptor for SecurityCenter. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the SecurityCenterRestTransport. + + .. code-block:: python + class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): + def pre_bulk_mute_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_bulk_mute_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_big_query_export(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_big_query_export(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_mute_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_mute_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_delete_big_query_export(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_delete_mute_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_delete_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_delete_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_get_big_query_export(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_big_query_export(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_effective_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_effective_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_mute_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_mute_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_big_query_exports(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_big_query_exports(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_descendant_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_effective_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_mute_configs(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_mute_configs(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_notification_configs(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_notification_configs(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_sources(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_sources(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_run_asset_discovery(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_run_asset_discovery(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_finding_state(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_finding_state(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_mute(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_mute(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_test_iam_permissions(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_test_iam_permissions(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_big_query_export(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_big_query_export(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_external_system(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_external_system(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_mute_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_mute_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_security_marks(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_marks(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_source(self, response): + logging.log(f"Received response: {response}") + return response + + transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) + client = SecurityCenterClient(transport=transport) + + + """ + def pre_bulk_mute_findings(self, request: securitycenter_service.BulkMuteFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.BulkMuteFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for bulk_mute_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_bulk_mute_findings(self, response: operations_pb2.Operation) -> operations_pb2.Operation: + """Post-rpc interceptor for bulk_mute_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_big_query_export(self, request: securitycenter_service.CreateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateBigQueryExportRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_big_query_export + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: + """Post-rpc interceptor for create_big_query_export + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for create_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_mute_config(self, request: securitycenter_service.CreateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateMuteConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_mute_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: + """Post-rpc interceptor for create_mute_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: + """Post-rpc interceptor for create_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_security_health_analytics_custom_module(self, request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for create_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_delete_big_query_export(self, request: securitycenter_service.DeleteBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteBigQueryExportRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_big_query_export + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def pre_delete_mute_config(self, request: securitycenter_service.DeleteMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteMuteConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_mute_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def pre_delete_security_health_analytics_custom_module(self, request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def pre_get_big_query_export(self, request: securitycenter_service.GetBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetBigQueryExportRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_big_query_export + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: + """Post-rpc interceptor for get_big_query_export + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_effective_security_health_analytics_custom_module(self, request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_effective_security_health_analytics_custom_module(self, response: effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_mute_config(self, request: securitycenter_service.GetMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetMuteConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_mute_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_mute_config(self, response: mute_config.MuteConfig) -> mute_config.MuteConfig: + """Post-rpc interceptor for get_mute_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: + """Post-rpc interceptor for get_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: + """Post-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_security_health_analytics_custom_module(self, request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_security_health_analytics_custom_module(self, response: security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_source(self, response: source.Source) -> source.Source: + """Post-rpc interceptor for get_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: + """Post-rpc interceptor for group_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: + """Post-rpc interceptor for group_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: + """Post-rpc interceptor for list_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_big_query_exports(self, request: securitycenter_service.ListBigQueryExportsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListBigQueryExportsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_big_query_exports + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_big_query_exports(self, response: securitycenter_service.ListBigQueryExportsResponse) -> securitycenter_service.ListBigQueryExportsResponse: + """Post-rpc interceptor for list_big_query_exports + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_descendant_security_health_analytics_custom_modules(self, request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules(self, response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_effective_security_health_analytics_custom_modules(self, request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules(self, response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: + """Post-rpc interceptor for list_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_mute_configs(self, request: securitycenter_service.ListMuteConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListMuteConfigsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_mute_configs + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_mute_configs(self, response: securitycenter_service.ListMuteConfigsResponse) -> securitycenter_service.ListMuteConfigsResponse: + """Post-rpc interceptor for list_mute_configs + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_notification_configs + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: + """Post-rpc interceptor for list_notification_configs + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_security_health_analytics_custom_modules(self, request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_security_health_analytics_custom_modules(self, response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_sources + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: + """Post-rpc interceptor for list_sources + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: + """Post-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: + """Post-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_mute(self, request: securitycenter_service.SetMuteRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetMuteRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_mute + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_mute(self, response: finding.Finding) -> finding.Finding: + """Post-rpc interceptor for set_mute + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: + """Post-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_big_query_export(self, request: securitycenter_service.UpdateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateBigQueryExportRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_big_query_export + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: + """Post-rpc interceptor for update_big_query_export + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_external_system(self, request: securitycenter_service.UpdateExternalSystemRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateExternalSystemRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_external_system + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_external_system(self, response: gcs_external_system.ExternalSystem) -> gcs_external_system.ExternalSystem: + """Post-rpc interceptor for update_external_system + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for update_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_mute_config(self, request: securitycenter_service.UpdateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateMuteConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_mute_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: + """Post-rpc interceptor for update_mute_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: + """Post-rpc interceptor for update_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: + """Post-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_health_analytics_custom_module(self, request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: + """Post-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for update_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + def pre_cancel_operation( + self, request: operations_pb2.CancelOperationRequest, metadata: Sequence[Tuple[str, str]] + ) -> Tuple[operations_pb2.CancelOperationRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_cancel_operation( + self, response: None + ) -> None: + """Post-rpc interceptor for cancel_operation + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_delete_operation( + self, request: operations_pb2.DeleteOperationRequest, metadata: Sequence[Tuple[str, str]] + ) -> Tuple[operations_pb2.DeleteOperationRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_delete_operation( + self, response: None + ) -> None: + """Post-rpc interceptor for delete_operation + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_operation( + self, request: operations_pb2.GetOperationRequest, metadata: Sequence[Tuple[str, str]] + ) -> Tuple[operations_pb2.GetOperationRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_operation + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_operation( + self, response: operations_pb2.Operation + ) -> operations_pb2.Operation: + """Post-rpc interceptor for get_operation + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_operations( + self, request: operations_pb2.ListOperationsRequest, metadata: Sequence[Tuple[str, str]] + ) -> Tuple[operations_pb2.ListOperationsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_operations + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_operations( + self, response: operations_pb2.ListOperationsResponse + ) -> operations_pb2.ListOperationsResponse: + """Post-rpc interceptor for list_operations + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class SecurityCenterRestStub: + _session: AuthorizedSession + _host: str + _interceptor: SecurityCenterRestInterceptor + + +class SecurityCenterRestTransport(SecurityCenterTransport): + """REST backend transport for SecurityCenter. + + V1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[ + ], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = 'https', + interceptor: Optional[SecurityCenterRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST) + self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or SecurityCenterRestInterceptor() + self._prep_wrapped_messages(client_info) + + @property + def operations_client(self) -> operations_v1.AbstractOperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Only create a new client if we do not already have one. + if self._operations_client is None: + http_options: Dict[str, List[Dict[str, str]]] = { + 'google.longrunning.Operations.CancelOperation': [ + { + 'method': 'post', + 'uri': '/v1/{name=organizations/*/operations/*}:cancel', + }, + ], + 'google.longrunning.Operations.DeleteOperation': [ + { + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.GetOperation': [ + { + 'method': 'get', + 'uri': '/v1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.ListOperations': [ + { + 'method': 'get', + 'uri': '/v1/{name=organizations/*/operations}', + }, + ], + } + + rest_transport = operations_v1.OperationsRestTransport( + host=self._host, + # use the credentials which are saved + credentials=self._credentials, + scopes=self._scopes, + http_options=http_options, + path_prefix="v1") + + self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) + + # Return the client from cache. + return self._operations_client + + class _BulkMuteFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("BulkMuteFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.BulkMuteFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.Operation: + r"""Call the bulk mute findings method over HTTP. + + Args: + request (~.securitycenter_service.BulkMuteFindingsRequest): + The request object. Request message for bulk findings + update. + Note: + 1. If multiple bulk update requests + match the same resource, the order in + which they get executed is not defined. + 2. Once a bulk operation is started, + there is no way to stop it. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.operations_pb2.Operation: + This resource represents a + long-running operation that is the + result of a network API call. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/findings:bulkMute', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*}/findings:bulkMute', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*}/findings:bulkMute', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_bulk_mute_findings(request, metadata) + pb_request = securitycenter_service.BulkMuteFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = operations_pb2.Operation() + json_format.Parse(response.content, resp, ignore_unknown_fields=True) + resp = self._interceptor.post_bulk_mute_findings(resp) + return resp + + class _CreateBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "bigQueryExportId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateBigQueryExportRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> bigquery_export.BigQueryExport: + r"""Call the create big query export method over HTTP. + + Args: + request (~.securitycenter_service.CreateBigQueryExportRequest): + The request object. Request message for creating a + BigQuery export. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.bigquery_export.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/bigQueryExports', + 'body': 'big_query_export', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*}/bigQueryExports', + 'body': 'big_query_export', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*}/bigQueryExports', + 'body': 'big_query_export', + }, + ] + request, metadata = self._interceptor.pre_create_big_query_export(request, metadata) + pb_request = securitycenter_service.CreateBigQueryExportRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = bigquery_export.BigQueryExport() + pb_resp = bigquery_export.BigQueryExport.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_big_query_export(resp) + return resp + + class _CreateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "findingId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the create finding method over HTTP. + + Args: + request (~.securitycenter_service.CreateFindingRequest): + The request object. Request message for creating a + finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*/sources/*}/findings', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_create_finding(request, metadata) + pb_request = securitycenter_service.CreateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_finding(resp) + return resp + + class _CreateMuteConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateMuteConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "muteConfigId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateMuteConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_mute_config.MuteConfig: + r"""Call the create mute config method over HTTP. + + Args: + request (~.securitycenter_service.CreateMuteConfigRequest): + The request object. Request message for creating a mute + config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_mute_config.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/muteConfigs', + 'body': 'mute_config', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*}/muteConfigs', + 'body': 'mute_config', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*}/muteConfigs', + 'body': 'mute_config', + }, + ] + request, metadata = self._interceptor.pre_create_mute_config(request, metadata) + pb_request = securitycenter_service.CreateMuteConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_mute_config.MuteConfig() + pb_resp = gcs_mute_config.MuteConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_mute_config(resp) + return resp + + class _CreateNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "configId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_notification_config.NotificationConfig: + r"""Call the create notification + config method over HTTP. + + Args: + request (~.securitycenter_service.CreateNotificationConfigRequest): + The request object. Request message for creating a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_notification_config.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/notificationConfigs', + 'body': 'notification_config', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*}/notificationConfigs', + 'body': 'notification_config', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*}/notificationConfigs', + 'body': 'notification_config', + }, + ] + request, metadata = self._interceptor.pre_create_notification_config(request, metadata) + pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_notification_config.NotificationConfig() + pb_resp = gcs_notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_notification_config(resp) + return resp + + class _CreateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the create security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for creating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', + 'body': 'security_health_analytics_custom_module', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', + 'body': 'security_health_analytics_custom_module', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', + 'body': 'security_health_analytics_custom_module', + }, + ] + request, metadata = self._interceptor.pre_create_security_health_analytics_custom_module(request, metadata) + pb_request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_security_health_analytics_custom_module(resp) + return resp + + class _CreateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the create source method over HTTP. + + Args: + request (~.securitycenter_service.CreateSourceRequest): + The request object. Request message for creating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/sources', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_create_source(request, metadata) + pb_request = securitycenter_service.CreateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_source(resp) + return resp + + class _DeleteBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.DeleteBigQueryExportRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ): + r"""Call the delete big query export method over HTTP. + + Args: + request (~.securitycenter_service.DeleteBigQueryExportRequest): + The request object. Request message for deleting a + BigQuery export. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=folders/*/bigQueryExports/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=projects/*/bigQueryExports/*}', + }, + ] + request, metadata = self._interceptor.pre_delete_big_query_export(request, metadata) + pb_request = securitycenter_service.DeleteBigQueryExportRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _DeleteMuteConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteMuteConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.DeleteMuteConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ): + r"""Call the delete mute config method over HTTP. + + Args: + request (~.securitycenter_service.DeleteMuteConfigRequest): + The request object. Request message for deleting a mute + config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/muteConfigs/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=folders/*/muteConfigs/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=projects/*/muteConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_delete_mute_config(request, metadata) + pb_request = securitycenter_service.DeleteMuteConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _DeleteNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.DeleteNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ): + r"""Call the delete notification + config method over HTTP. + + Args: + request (~.securitycenter_service.DeleteNotificationConfigRequest): + The request object. Request message for deleting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=folders/*/notificationConfigs/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=projects/*/notificationConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) + pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _DeleteSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ): + r"""Call the delete security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for deleting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', + }, +{ + 'method': 'delete', + 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', + }, + ] + request, metadata = self._interceptor.pre_delete_security_health_analytics_custom_module(request, metadata) + pb_request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _GetBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("GetBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetBigQueryExportRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> bigquery_export.BigQueryExport: + r"""Call the get big query export method over HTTP. + + Args: + request (~.securitycenter_service.GetBigQueryExportRequest): + The request object. Request message for retrieving a + BigQuery export. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.bigquery_export.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=folders/*/bigQueryExports/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=projects/*/bigQueryExports/*}', + }, + ] + request, metadata = self._interceptor.pre_get_big_query_export(request, metadata) + pb_request = securitycenter_service.GetBigQueryExportRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = bigquery_export.BigQueryExport() + pb_resp = bigquery_export.BigQueryExport.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_big_query_export(resp) + return resp + + class _GetEffectiveSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("GetEffectiveSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Call the get effective security + health analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the + representation of a Security Health Analytics custom + module at a specified level of the resource hierarchy: + organization, folder, or project. If a custom module is + inherited from a parent organization or folder, the + value of the ``enablementState`` property in + EffectiveSecurityHealthAnalyticsCustomModule is set to + the value that is effective in the parent, instead of + ``INHERITED``. For example, if the module is enabled in + a parent organization or folder, the effective + enablement_state for the module in all child folders or + projects is also ``enabled``. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', + }, + ] + request, metadata = self._interceptor.pre_get_effective_security_health_analytics_custom_module(request, metadata) + pb_request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + pb_resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_effective_security_health_analytics_custom_module(resp) + return resp + + class _GetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("GetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.GetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the get iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.GetIamPolicyRequest): + The request object. Request message for ``GetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{resource=organizations/*/sources/*}:getIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_iam_policy(resp) + return resp + + class _GetMuteConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("GetMuteConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetMuteConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> mute_config.MuteConfig: + r"""Call the get mute config method over HTTP. + + Args: + request (~.securitycenter_service.GetMuteConfigRequest): + The request object. Request message for retrieving a mute + config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.mute_config.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/muteConfigs/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=folders/*/muteConfigs/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=projects/*/muteConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_get_mute_config(request, metadata) + pb_request = securitycenter_service.GetMuteConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = mute_config.MuteConfig() + pb_resp = mute_config.MuteConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_mute_config(resp) + return resp + + class _GetNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("GetNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> notification_config.NotificationConfig: + r"""Call the get notification config method over HTTP. + + Args: + request (~.securitycenter_service.GetNotificationConfigRequest): + The request object. Request message for getting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.notification_config.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=folders/*/notificationConfigs/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=projects/*/notificationConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_get_notification_config(request, metadata) + pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = notification_config.NotificationConfig() + pb_resp = notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_notification_config(resp) + return resp + + class _GetOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("GetOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> organization_settings.OrganizationSettings: + r"""Call the get organization settings method over HTTP. + + Args: + request (~.securitycenter_service.GetOrganizationSettingsRequest): + The request object. Request message for getting + organization settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/organizationSettings}', + }, + ] + request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) + pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = organization_settings.OrganizationSettings() + pb_resp = organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_organization_settings(resp) + return resp + + class _GetSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("GetSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the get security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', + }, +{ + 'method': 'get', + 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', + }, + ] + request, metadata = self._interceptor.pre_get_security_health_analytics_custom_module(request, metadata) + pb_request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + pb_resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_security_health_analytics_custom_module(resp) + return resp + + class _GetSource(SecurityCenterRestStub): + def __hash__(self): + return hash("GetSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> source.Source: + r"""Call the get source method over HTTP. + + Args: + request (~.securitycenter_service.GetSourceRequest): + The request object. Request message for getting a source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/sources/*}', + }, + ] + request, metadata = self._interceptor.pre_get_source(request, metadata) + pb_request = securitycenter_service.GetSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = source.Source() + pb_resp = source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_source(resp) + return resp + + class _GroupAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupAssetsResponse: + r"""Call the group assets method over HTTP. + + Args: + request (~.securitycenter_service.GroupAssetsRequest): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupAssetsResponse: + Response message for grouping by + assets. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/assets:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*}/assets:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*}/assets:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_assets(request, metadata) + pb_request = securitycenter_service.GroupAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupAssetsResponse() + pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_assets(resp) + return resp + + class _GroupFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupFindingsResponse: + r"""Call the group findings method over HTTP. + + Args: + request (~.securitycenter_service.GroupFindingsRequest): + The request object. Request message for grouping by + findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupFindingsResponse: + Response message for group by + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*/sources/*}/findings:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=folders/*/sources/*}/findings:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{parent=projects/*/sources/*}/findings:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_findings(request, metadata) + pb_request = securitycenter_service.GroupFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupFindingsResponse() + pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_findings(resp) + return resp + + class _ListAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("ListAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListAssetsResponse: + r"""Call the list assets method over HTTP. + + Args: + request (~.securitycenter_service.ListAssetsRequest): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListAssetsResponse: + Response message for listing assets. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*}/assets', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*}/assets', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*}/assets', + }, + ] + request, metadata = self._interceptor.pre_list_assets(request, metadata) + pb_request = securitycenter_service.ListAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListAssetsResponse() + pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_assets(resp) + return resp + + class _ListBigQueryExports(SecurityCenterRestStub): + def __hash__(self): + return hash("ListBigQueryExports") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListBigQueryExportsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListBigQueryExportsResponse: + r"""Call the list big query exports method over HTTP. + + Args: + request (~.securitycenter_service.ListBigQueryExportsRequest): + The request object. Request message for listing BigQuery + exports at a given scope e.g. + organization, folder or project. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListBigQueryExportsResponse: + Response message for listing BigQuery + exports. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*}/bigQueryExports', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*}/bigQueryExports', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*}/bigQueryExports', + }, + ] + request, metadata = self._interceptor.pre_list_big_query_exports(request, metadata) + pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListBigQueryExportsResponse() + pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_big_query_exports(resp) + return resp + + class _ListDescendantSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListDescendantSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list descendant security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing + descendant security health analytics + custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + descendant security health analytics + custom modules. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules:listDescendant', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules:listDescendant', + }, + ] + request, metadata = self._interceptor.pre_list_descendant_security_health_analytics_custom_modules(request, metadata) + pb_request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + pb_resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_descendant_security_health_analytics_custom_modules(resp) + return resp + + class _ListEffectiveSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListEffectiveSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list effective security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + effective security health analytics + custom modules. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/effectiveCustomModules', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/effectiveCustomModules', + }, + ] + request, metadata = self._interceptor.pre_list_effective_security_health_analytics_custom_modules(request, metadata) + pb_request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + pb_resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_effective_security_health_analytics_custom_modules(resp) + return resp + + class _ListFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("ListFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListFindingsResponse: + r"""Call the list findings method over HTTP. + + Args: + request (~.securitycenter_service.ListFindingsRequest): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListFindingsResponse: + Response message for listing + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*/sources/*}/findings', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*/sources/*}/findings', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*/sources/*}/findings', + }, + ] + request, metadata = self._interceptor.pre_list_findings(request, metadata) + pb_request = securitycenter_service.ListFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListFindingsResponse() + pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_findings(resp) + return resp + + class _ListMuteConfigs(SecurityCenterRestStub): + def __hash__(self): + return hash("ListMuteConfigs") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListMuteConfigsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListMuteConfigsResponse: + r"""Call the list mute configs method over HTTP. + + Args: + request (~.securitycenter_service.ListMuteConfigsRequest): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListMuteConfigsResponse: + Response message for listing mute + configs. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*}/muteConfigs', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*}/muteConfigs', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*}/muteConfigs', + }, + ] + request, metadata = self._interceptor.pre_list_mute_configs(request, metadata) + pb_request = securitycenter_service.ListMuteConfigsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListMuteConfigsResponse() + pb_resp = securitycenter_service.ListMuteConfigsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_mute_configs(resp) + return resp + + class _ListNotificationConfigs(SecurityCenterRestStub): + def __hash__(self): + return hash("ListNotificationConfigs") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListNotificationConfigsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListNotificationConfigsResponse: + r"""Call the list notification configs method over HTTP. + + Args: + request (~.securitycenter_service.ListNotificationConfigsRequest): + The request object. Request message for listing + notification configs. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListNotificationConfigsResponse: + Response message for listing + notification configs. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*}/notificationConfigs', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*}/notificationConfigs', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*}/notificationConfigs', + }, + ] + request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) + pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListNotificationConfigsResponse() + pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_notification_configs(resp) + return resp + + class _ListSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list security health + analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing security + health analytics custom modules. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', + }, + ] + request, metadata = self._interceptor.pre_list_security_health_analytics_custom_modules(request, metadata) + pb_request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + pb_resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_security_health_analytics_custom_modules(resp) + return resp + + class _ListSources(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSources") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListSourcesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListSourcesResponse: + r"""Call the list sources method over HTTP. + + Args: + request (~.securitycenter_service.ListSourcesRequest): + The request object. Request message for listing sources. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSourcesResponse: + Response message for listing sources. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{parent=organizations/*}/sources', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=folders/*}/sources', + }, +{ + 'method': 'get', + 'uri': '/v1/{parent=projects/*}/sources', + }, + ] + request, metadata = self._interceptor.pre_list_sources(request, metadata) + pb_request = securitycenter_service.ListSourcesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListSourcesResponse() + pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_sources(resp) + return resp + + class _RunAssetDiscovery(SecurityCenterRestStub): + def __hash__(self): + return hash("RunAssetDiscovery") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.RunAssetDiscoveryRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.Operation: + r"""Call the run asset discovery method over HTTP. + + Args: + request (~.securitycenter_service.RunAssetDiscoveryRequest): + The request object. Request message for running asset + discovery for an organization. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.operations_pb2.Operation: + This resource represents a + long-running operation that is the + result of a network API call. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{parent=organizations/*}/assets:runDiscovery', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) + pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = operations_pb2.Operation() + json_format.Parse(response.content, resp, ignore_unknown_fields=True) + resp = self._interceptor.post_run_asset_discovery(resp) + return resp + + class _SetFindingState(SecurityCenterRestStub): + def __hash__(self): + return hash("SetFindingState") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.SetFindingStateRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> finding.Finding: + r"""Call the set finding state method over HTTP. + + Args: + request (~.securitycenter_service.SetFindingStateRequest): + The request object. Request message for updating a + finding's state. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setState', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setState', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setState', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_finding_state(request, metadata) + pb_request = securitycenter_service.SetFindingStateRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = finding.Finding() + pb_resp = finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_finding_state(resp) + return resp + + class _SetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("SetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.SetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the set iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.SetIamPolicyRequest): + The request object. Request message for ``SetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{resource=organizations/*/sources/*}:setIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_iam_policy(resp) + return resp + + class _SetMute(SecurityCenterRestStub): + def __hash__(self): + return hash("SetMute") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.SetMuteRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> finding.Finding: + r"""Call the set mute method over HTTP. + + Args: + request (~.securitycenter_service.SetMuteRequest): + The request object. Request message for updating a + finding's mute status. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setMute', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setMute', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setMute', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_mute(request, metadata) + pb_request = securitycenter_service.SetMuteRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = finding.Finding() + pb_resp = finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_mute(resp) + return resp + + class _TestIamPermissions(SecurityCenterRestStub): + def __hash__(self): + return hash("TestIamPermissions") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.TestIamPermissionsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Call the test iam permissions method over HTTP. + + Args: + request (~.iam_policy_pb2.TestIamPermissionsRequest): + The request object. Request message for ``TestIamPermissions`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.iam_policy_pb2.TestIamPermissionsResponse: + Response message for ``TestIamPermissions`` method. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{resource=organizations/*/sources/*}:testIamPermissions', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = iam_policy_pb2.TestIamPermissionsResponse() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_test_iam_permissions(resp) + return resp + + class _UpdateBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateBigQueryExportRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> bigquery_export.BigQueryExport: + r"""Call the update big query export method over HTTP. + + Args: + request (~.securitycenter_service.UpdateBigQueryExportRequest): + The request object. Request message for updating a + BigQuery export. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.bigquery_export.BigQueryExport: + Configures how to deliver Findings to + BigQuery Instance. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{big_query_export.name=organizations/*/bigQueryExports/*}', + 'body': 'big_query_export', + }, +{ + 'method': 'patch', + 'uri': '/v1/{big_query_export.name=folders/*/bigQueryExports/*}', + 'body': 'big_query_export', + }, +{ + 'method': 'patch', + 'uri': '/v1/{big_query_export.name=projects/*/bigQueryExports/*}', + 'body': 'big_query_export', + }, + ] + request, metadata = self._interceptor.pre_update_big_query_export(request, metadata) + pb_request = securitycenter_service.UpdateBigQueryExportRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = bigquery_export.BigQueryExport() + pb_resp = bigquery_export.BigQueryExport.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_big_query_export(resp) + return resp + + class _UpdateExternalSystem(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateExternalSystem") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateExternalSystemRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_external_system.ExternalSystem: + r"""Call the update external system method over HTTP. + + Args: + request (~.securitycenter_service.UpdateExternalSystemRequest): + The request object. Request message for updating a + ExternalSystem resource. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_external_system.ExternalSystem: + Representation of third party + SIEM/SOAR fields within SCC. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}', + 'body': 'external_system', + }, +{ + 'method': 'patch', + 'uri': '/v1/{external_system.name=folders/*/sources/*/findings/*/externalSystems/*}', + 'body': 'external_system', + }, +{ + 'method': 'patch', + 'uri': '/v1/{external_system.name=projects/*/sources/*/findings/*/externalSystems/*}', + 'body': 'external_system', + }, + ] + request, metadata = self._interceptor.pre_update_external_system(request, metadata) + pb_request = securitycenter_service.UpdateExternalSystemRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_external_system.ExternalSystem() + pb_resp = gcs_external_system.ExternalSystem.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_external_system(resp) + return resp + + class _UpdateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the update finding method over HTTP. + + Args: + request (~.securitycenter_service.UpdateFindingRequest): + The request object. Request message for updating or + creating a finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + like security, risk, health, or privacy, + that is ingested into Security Command + Center for presentation, notification, + analysis, policy testing, and + enforcement. For example, a cross-site + scripting (XSS) vulnerability in an App + Engine application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{finding.name=organizations/*/sources/*/findings/*}', + 'body': 'finding', + }, +{ + 'method': 'patch', + 'uri': '/v1/{finding.name=folders/*/sources/*/findings/*}', + 'body': 'finding', + }, +{ + 'method': 'patch', + 'uri': '/v1/{finding.name=projects/*/sources/*/findings/*}', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_update_finding(request, metadata) + pb_request = securitycenter_service.UpdateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_finding(resp) + return resp + + class _UpdateMuteConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateMuteConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateMuteConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_mute_config.MuteConfig: + r"""Call the update mute config method over HTTP. + + Args: + request (~.securitycenter_service.UpdateMuteConfigRequest): + The request object. Request message for updating a mute + config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_mute_config.MuteConfig: + A mute config is a Cloud SCC resource + that contains the configuration to mute + create/update events of findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{mute_config.name=organizations/*/muteConfigs/*}', + 'body': 'mute_config', + }, +{ + 'method': 'patch', + 'uri': '/v1/{mute_config.name=folders/*/muteConfigs/*}', + 'body': 'mute_config', + }, +{ + 'method': 'patch', + 'uri': '/v1/{mute_config.name=projects/*/muteConfigs/*}', + 'body': 'mute_config', + }, + ] + request, metadata = self._interceptor.pre_update_mute_config(request, metadata) + pb_request = securitycenter_service.UpdateMuteConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_mute_config.MuteConfig() + pb_resp = gcs_mute_config.MuteConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_mute_config(resp) + return resp + + class _UpdateNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_notification_config.NotificationConfig: + r"""Call the update notification + config method over HTTP. + + Args: + request (~.securitycenter_service.UpdateNotificationConfigRequest): + The request object. Request message for updating a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_notification_config.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{notification_config.name=organizations/*/notificationConfigs/*}', + 'body': 'notification_config', + }, +{ + 'method': 'patch', + 'uri': '/v1/{notification_config.name=folders/*/notificationConfigs/*}', + 'body': 'notification_config', + }, +{ + 'method': 'patch', + 'uri': '/v1/{notification_config.name=projects/*/notificationConfigs/*}', + 'body': 'notification_config', + }, + ] + request, metadata = self._interceptor.pre_update_notification_config(request, metadata) + pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_notification_config.NotificationConfig() + pb_resp = gcs_notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_notification_config(resp) + return resp + + class _UpdateOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Call the update organization + settings method over HTTP. + + Args: + request (~.securitycenter_service.UpdateOrganizationSettingsRequest): + The request object. Request message for updating an + organization's settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{organization_settings.name=organizations/*/organizationSettings}', + 'body': 'organization_settings', + }, + ] + request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) + pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_organization_settings.OrganizationSettings() + pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_organization_settings(resp) + return resp + + class _UpdateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the update security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for updating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', + 'body': 'security_health_analytics_custom_module', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_health_analytics_custom_module.name=folders/*/securityHealthAnalyticsSettings/customModules/*}', + 'body': 'security_health_analytics_custom_module', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_health_analytics_custom_module.name=projects/*/securityHealthAnalyticsSettings/customModules/*}', + 'body': 'security_health_analytics_custom_module', + }, + ] + request, metadata = self._interceptor.pre_update_security_health_analytics_custom_module(request, metadata) + pb_request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_security_health_analytics_custom_module(resp) + return resp + + class _UpdateSecurityMarks(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityMarks") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSecurityMarksRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_security_marks.SecurityMarks: + r"""Call the update security marks method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityMarksRequest): + The request object. Request message for updating a + SecurityMarks resource. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_marks.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=organizations/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=folders/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=projects/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, + ] + request, metadata = self._interceptor.pre_update_security_marks(request, metadata) + pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_security_marks.SecurityMarks() + pb_resp = gcs_security_marks.SecurityMarks.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_security_marks(resp) + return resp + + class _UpdateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the update source method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSourceRequest): + The request object. Request message for updating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1/{source.name=organizations/*/sources/*}', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_update_source(request, metadata) + pb_request = securitycenter_service.UpdateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_source(resp) + return resp + + @property + def bulk_mute_findings(self) -> Callable[ + [securitycenter_service.BulkMuteFindingsRequest], + operations_pb2.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._BulkMuteFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_big_query_export(self) -> Callable[ + [securitycenter_service.CreateBigQueryExportRequest], + bigquery_export.BigQueryExport]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_mute_config(self) -> Callable[ + [securitycenter_service.CreateMuteConfigRequest], + gcs_mute_config.MuteConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateMuteConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def delete_big_query_export(self) -> Callable[ + [securitycenter_service.DeleteBigQueryExportRequest], + empty_pb2.Empty]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + + @property + def delete_mute_config(self) -> Callable[ + [securitycenter_service.DeleteMuteConfigRequest], + empty_pb2.Empty]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteMuteConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + empty_pb2.Empty]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def delete_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_big_query_export(self) -> Callable[ + [securitycenter_service.GetBigQueryExportRequest], + bigquery_export.BigQueryExport]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_effective_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetEffectiveSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_mute_config(self) -> Callable[ + [securitycenter_service.GetMuteConfigRequest], + mute_config.MuteConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetMuteConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_big_query_exports(self) -> Callable[ + [securitycenter_service.ListBigQueryExportsRequest], + securitycenter_service.ListBigQueryExportsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListBigQueryExports(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListDescendantSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_effective_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListEffectiveSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_mute_configs(self) -> Callable[ + [securitycenter_service.ListMuteConfigsRequest], + securitycenter_service.ListMuteConfigsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListMuteConfigs(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + securitycenter_service.ListNotificationConfigsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_security_health_analytics_custom_modules(self) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSources(self._session, self._host, self._interceptor) # type: ignore + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_mute(self) -> Callable[ + [securitycenter_service.SetMuteRequest], + finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetMute(self._session, self._host, self._interceptor) # type: ignore + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_big_query_export(self) -> Callable[ + [securitycenter_service.UpdateBigQueryExportRequest], + bigquery_export.BigQueryExport]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_external_system(self) -> Callable[ + [securitycenter_service.UpdateExternalSystemRequest], + gcs_external_system.ExternalSystem]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateExternalSystem(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_mute_config(self) -> Callable[ + [securitycenter_service.UpdateMuteConfigRequest], + gcs_mute_config.MuteConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateMuteConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_security_health_analytics_custom_module(self) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def cancel_operation(self): + return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore + + class _CancelOperation(SecurityCenterRestStub): + def __call__(self, + request: operations_pb2.CancelOperationRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> None: + + r"""Call the cancel operation method over HTTP. + + Args: + request (operations_pb2.CancelOperationRequest): + The request object for CancelOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1/{name=organizations/*/operations/*}:cancel', + }, + ] + + request, metadata = self._interceptor.pre_cancel_operation(request, metadata) + request_kwargs = json_format.MessageToDict(request) + transcoded_request = path_template.transcode( + http_options, **request_kwargs) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json.dumps(transcoded_request['query_params'])) + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + return self._interceptor.post_cancel_operation(None) + + @property + def delete_operation(self): + return self._DeleteOperation(self._session, self._host, self._interceptor) # type: ignore + + class _DeleteOperation(SecurityCenterRestStub): + def __call__(self, + request: operations_pb2.DeleteOperationRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> None: + + r"""Call the delete operation method over HTTP. + + Args: + request (operations_pb2.DeleteOperationRequest): + The request object for DeleteOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1/{name=organizations/*/operations/*}', + }, + ] + + request, metadata = self._interceptor.pre_delete_operation(request, metadata) + request_kwargs = json_format.MessageToDict(request) + transcoded_request = path_template.transcode( + http_options, **request_kwargs) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json.dumps(transcoded_request['query_params'])) + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + return self._interceptor.post_delete_operation(None) + + @property + def get_operation(self): + return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore + + class _GetOperation(SecurityCenterRestStub): + def __call__(self, + request: operations_pb2.GetOperationRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.Operation: + + r"""Call the get operation method over HTTP. + + Args: + request (operations_pb2.GetOperationRequest): + The request object for GetOperation method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + operations_pb2.Operation: Response from GetOperation method. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/operations/*}', + }, + ] + + request, metadata = self._interceptor.pre_get_operation(request, metadata) + request_kwargs = json_format.MessageToDict(request) + transcoded_request = path_template.transcode( + http_options, **request_kwargs) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json.dumps(transcoded_request['query_params'])) + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + resp = operations_pb2.Operation() + resp = json_format.Parse(response.content.decode("utf-8"), resp) + resp = self._interceptor.post_get_operation(resp) + return resp + + @property + def list_operations(self): + return self._ListOperations(self._session, self._host, self._interceptor) # type: ignore + + class _ListOperations(SecurityCenterRestStub): + def __call__(self, + request: operations_pb2.ListOperationsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.ListOperationsResponse: + + r"""Call the list operations method over HTTP. + + Args: + request (operations_pb2.ListOperationsRequest): + The request object for ListOperations method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + operations_pb2.ListOperationsResponse: Response from ListOperations method. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1/{name=organizations/*/operations}', + }, + ] + + request, metadata = self._interceptor.pre_list_operations(request, metadata) + request_kwargs = json_format.MessageToDict(request) + transcoded_request = path_template.transcode( + http_options, **request_kwargs) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json.dumps(transcoded_request['query_params'])) + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + resp = operations_pb2.ListOperationsResponse() + resp = json_format.Parse(response.content.decode("utf-8"), resp) + resp = self._interceptor.post_list_operations(resp) + return resp + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__=( + 'SecurityCenterRestTransport', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py new file mode 100644 index 00000000..3b48f777 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py @@ -0,0 +1,272 @@ +# -*- 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. +# +from .access import ( + Access, + Geolocation, + ServiceAccountDelegationInfo, +) +from .asset import ( + Asset, +) +from .bigquery_export import ( + BigQueryExport, +) +from .compliance import ( + Compliance, +) +from .connection import ( + Connection, +) +from .contact_details import ( + Contact, + ContactDetails, +) +from .container import ( + Container, +) +from .database import ( + Database, +) +from .effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) +from .exfiltration import ( + ExfilResource, + Exfiltration, +) +from .external_system import ( + ExternalSystem, +) +from .file import ( + File, +) +from .finding import ( + Finding, +) +from .folder import ( + Folder, +) +from .iam_binding import ( + IamBinding, +) +from .indicator import ( + Indicator, +) +from .kernel_rootkit import ( + KernelRootkit, +) +from .kubernetes import ( + Kubernetes, +) +from .label import ( + Label, +) +from .mitre_attack import ( + MitreAttack, +) +from .mute_config import ( + MuteConfig, +) +from .notification_config import ( + NotificationConfig, +) +from .notification_message import ( + NotificationMessage, +) +from .organization_settings import ( + OrganizationSettings, +) +from .process import ( + EnvironmentVariable, + Process, +) +from .resource import ( + Resource, +) +from .run_asset_discovery_response import ( + RunAssetDiscoveryResponse, +) +from .security_health_analytics_custom_config import ( + CustomConfig, +) +from .security_health_analytics_custom_module import ( + SecurityHealthAnalyticsCustomModule, +) +from .security_marks import ( + SecurityMarks, +) +from .securitycenter_service import ( + BulkMuteFindingsRequest, + BulkMuteFindingsResponse, + CreateBigQueryExportRequest, + CreateFindingRequest, + CreateMuteConfigRequest, + CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, + CreateSourceRequest, + DeleteBigQueryExportRequest, + DeleteMuteConfigRequest, + DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, + GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + GetMuteConfigRequest, + GetNotificationConfigRequest, + GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, + GetSourceRequest, + GroupAssetsRequest, + GroupAssetsResponse, + GroupFindingsRequest, + GroupFindingsResponse, + GroupResult, + ListAssetsRequest, + ListAssetsResponse, + ListBigQueryExportsRequest, + ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ListFindingsRequest, + ListFindingsResponse, + ListMuteConfigsRequest, + ListMuteConfigsResponse, + ListNotificationConfigsRequest, + ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, + ListSourcesRequest, + ListSourcesResponse, + RunAssetDiscoveryRequest, + SetFindingStateRequest, + SetMuteRequest, + UpdateBigQueryExportRequest, + UpdateExternalSystemRequest, + UpdateFindingRequest, + UpdateMuteConfigRequest, + UpdateNotificationConfigRequest, + UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, + UpdateSecurityMarksRequest, + UpdateSourceRequest, +) +from .source import ( + Source, +) +from .vulnerability import ( + Cve, + Cvssv3, + Reference, + Vulnerability, +) + +__all__ = ( + 'Access', + 'Geolocation', + 'ServiceAccountDelegationInfo', + 'Asset', + 'BigQueryExport', + 'Compliance', + 'Connection', + 'Contact', + 'ContactDetails', + 'Container', + 'Database', + 'EffectiveSecurityHealthAnalyticsCustomModule', + 'ExfilResource', + 'Exfiltration', + 'ExternalSystem', + 'File', + 'Finding', + 'Folder', + 'IamBinding', + 'Indicator', + 'KernelRootkit', + 'Kubernetes', + 'Label', + 'MitreAttack', + 'MuteConfig', + 'NotificationConfig', + 'NotificationMessage', + 'OrganizationSettings', + 'EnvironmentVariable', + 'Process', + 'Resource', + 'RunAssetDiscoveryResponse', + 'CustomConfig', + 'SecurityHealthAnalyticsCustomModule', + 'SecurityMarks', + 'BulkMuteFindingsRequest', + 'BulkMuteFindingsResponse', + 'CreateBigQueryExportRequest', + 'CreateFindingRequest', + 'CreateMuteConfigRequest', + 'CreateNotificationConfigRequest', + 'CreateSecurityHealthAnalyticsCustomModuleRequest', + 'CreateSourceRequest', + 'DeleteBigQueryExportRequest', + 'DeleteMuteConfigRequest', + 'DeleteNotificationConfigRequest', + 'DeleteSecurityHealthAnalyticsCustomModuleRequest', + 'GetBigQueryExportRequest', + 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', + 'GetMuteConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetSecurityHealthAnalyticsCustomModuleRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListBigQueryExportsRequest', + 'ListBigQueryExportsResponse', + 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', + 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListMuteConfigsRequest', + 'ListMuteConfigsResponse', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListSecurityHealthAnalyticsCustomModulesRequest', + 'ListSecurityHealthAnalyticsCustomModulesResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'SetMuteRequest', + 'UpdateBigQueryExportRequest', + 'UpdateExternalSystemRequest', + 'UpdateFindingRequest', + 'UpdateMuteConfigRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityHealthAnalyticsCustomModuleRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', + 'Cve', + 'Cvssv3', + 'Reference', + 'Vulnerability', +) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py new file mode 100644 index 00000000..40e3c27a --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py @@ -0,0 +1,190 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Access', + 'ServiceAccountDelegationInfo', + 'Geolocation', + }, +) + + +class Access(proto.Message): + r"""Represents an access event. + + Attributes: + principal_email (str): + Associated email, such as "foo@google.com". + + The email address of the authenticated user (or service + account on behalf of third party principal) making the + request. For third party identity callers, the + ``principal_subject`` field is populated instead of this + field. For privacy reasons, the principal email address is + sometimes redacted. For more information, see `Caller + identities in audit + logs `__. + caller_ip (str): + Caller's IP address, such as "1.1.1.1". + caller_ip_geo (google.cloud.securitycenter_v1.types.Geolocation): + The caller IP's geolocation, which identifies + where the call came from. + user_agent_family (str): + What kind of user agent is associated, for + example operating system shells, embedded or + stand-alone applications, etc. + service_name (str): + This is the API service that the service + account made a call to, e.g. + "iam.googleapis.com". + method_name (str): + The method that the service account called, + e.g. "SetIamPolicy". + principal_subject (str): + A string representing the principal_subject associated with + the identity. As compared to ``principal_email``, supports + principals that aren't associated with email addresses, such + as third party principals. For most identities, the format + will be + ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` + except for some GKE identities (GKE_WORKLOAD, FREEFORM, + GKE_HUB_WORKLOAD) that are still in the legacy format + ``serviceAccount:{identity pool name}[{subject}]`` + service_account_key_name (str): + The name of the service account key used to create or + exchange credentials for authenticating the service account + making the request. This is a scheme-less URI full resource + name. For example: + + "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}". + service_account_delegation_info (MutableSequence[google.cloud.securitycenter_v1.types.ServiceAccountDelegationInfo]): + Identity delegation history of an + authenticated service account that makes the + request. It contains information on the real + authorities that try to access GCP resources by + delegating on a service account. When multiple + authorities are present, they are guaranteed to + be sorted based on the original ordering of the + identity delegation events. + user_name (str): + A string that represents the username of a + user, user account, or other entity involved in + the access event. What the entity is and what + its role in the access event is depends on the + finding that this field appears in. The entity + is likely not an IAM principal, but could be a + user that is logged into an operating system, if + the finding is VM-related, or a user that is + logged into some type of application that is + involved in the access event. + """ + + principal_email: str = proto.Field( + proto.STRING, + number=1, + ) + caller_ip: str = proto.Field( + proto.STRING, + number=2, + ) + caller_ip_geo: 'Geolocation' = proto.Field( + proto.MESSAGE, + number=3, + message='Geolocation', + ) + user_agent_family: str = proto.Field( + proto.STRING, + number=4, + ) + service_name: str = proto.Field( + proto.STRING, + number=5, + ) + method_name: str = proto.Field( + proto.STRING, + number=6, + ) + principal_subject: str = proto.Field( + proto.STRING, + number=7, + ) + service_account_key_name: str = proto.Field( + proto.STRING, + number=8, + ) + service_account_delegation_info: MutableSequence['ServiceAccountDelegationInfo'] = proto.RepeatedField( + proto.MESSAGE, + number=9, + message='ServiceAccountDelegationInfo', + ) + user_name: str = proto.Field( + proto.STRING, + number=11, + ) + + +class ServiceAccountDelegationInfo(proto.Message): + r"""Identity delegation history of an authenticated service + account. + + Attributes: + principal_email (str): + The email address of a Google account. + principal_subject (str): + A string representing the principal_subject associated with + the identity. As compared to ``principal_email``, supports + principals that aren't associated with email addresses, such + as third party principals. For most identities, the format + will be + ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` + except for some GKE identities (GKE_WORKLOAD, FREEFORM, + GKE_HUB_WORKLOAD) that are still in the legacy format + ``serviceAccount:{identity pool name}[{subject}]`` + """ + + principal_email: str = proto.Field( + proto.STRING, + number=1, + ) + principal_subject: str = proto.Field( + proto.STRING, + number=2, + ) + + +class Geolocation(proto.Message): + r"""Represents a geographical location for a given access. + + Attributes: + region_code (str): + A CLDR. + """ + + region_code: str = proto.Field( + proto.STRING, + number=1, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py new file mode 100644 index 00000000..711b24bc --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py @@ -0,0 +1,227 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import folder +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Asset', + }, +) + + +class Asset(proto.Message): + r"""Security Command Center representation of a Google Cloud + resource. + + The Asset is a Security Command Center resource that captures + information about a single Google Cloud resource. All + modifications to an Asset are only within the context of + Security Command Center and don't affect the referenced Google + Cloud resource. + + Attributes: + name (str): + The relative resource name of this asset. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/assets/{asset_id}". + security_center_properties (google.cloud.securitycenter_v1.types.Asset.SecurityCenterProperties): + Security Command Center managed properties. + These properties are managed by Security Command + Center and cannot be modified by the user. + resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Resource managed properties. These properties + are managed and defined by the Google Cloud + resource and cannot be modified by the user. + security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): + User specified security marks. These marks + are entirely managed by the user and come from + the SecurityMarks resource that belongs to the + asset. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was created in + Security Command Center. + update_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was last updated + or added in Cloud SCC. + iam_policy (google.cloud.securitycenter_v1.types.Asset.IamPolicy): + Cloud IAM Policy information associated with + the Google Cloud resource described by the + Security Command Center asset. This information + is managed and defined by the Google Cloud + resource and cannot be modified by the user. + canonical_name (str): + The canonical name of the resource. It's either + "organizations/{organization_id}/assets/{asset_id}", + "folders/{folder_id}/assets/{asset_id}" or + "projects/{project_number}/assets/{asset_id}", depending on + the closest CRM ancestor of the resource. + """ + + class SecurityCenterProperties(proto.Message): + r"""Security Command Center managed properties. These properties + are managed by Security Command Center and cannot be modified by + the user. + + Attributes: + resource_name (str): + The full resource name of the Google Cloud resource this + asset represents. This field is immutable after create time. + See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_type (str): + The type of the Google Cloud resource. + Examples include: APPLICATION, PROJECT, and + ORGANIZATION. This is a case insensitive field + defined by Security Command Center and/or the + producer of the resource and is immutable after + create time. + resource_parent (str): + The full resource name of the immediate parent of the + resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_project (str): + The full resource name of the project the resource belongs + to. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_owners (MutableSequence[str]): + Owners of the Google Cloud resource. + resource_display_name (str): + The user defined display name for this + resource. + resource_parent_display_name (str): + The user defined display name for the parent + of this resource. + resource_project_display_name (str): + The user defined display name for the project + of this resource. + folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): + Contains a Folder message for each folder in + the assets ancestry. The first folder is the + deepest nested folder, and the last folder is + the folder directly under the Organization. + """ + + resource_name: str = proto.Field( + proto.STRING, + number=1, + ) + resource_type: str = proto.Field( + proto.STRING, + number=2, + ) + resource_parent: str = proto.Field( + proto.STRING, + number=3, + ) + resource_project: str = proto.Field( + proto.STRING, + number=4, + ) + resource_owners: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=5, + ) + resource_display_name: str = proto.Field( + proto.STRING, + number=6, + ) + resource_parent_display_name: str = proto.Field( + proto.STRING, + number=7, + ) + resource_project_display_name: str = proto.Field( + proto.STRING, + number=8, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=10, + message=folder.Folder, + ) + + class IamPolicy(proto.Message): + r"""Cloud IAM Policy information associated with the Google Cloud + resource described by the Security Command Center asset. This + information is managed and defined by the Google Cloud resource + and cannot be modified by the user. + + Attributes: + policy_blob (str): + The JSON representation of the Policy + associated with the asset. See + https://cloud.google.com/iam/reference/rest/v1/Policy + for format details. + """ + + policy_blob: str = proto.Field( + proto.STRING, + number=1, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + security_center_properties: SecurityCenterProperties = proto.Field( + proto.MESSAGE, + number=2, + message=SecurityCenterProperties, + ) + resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + iam_policy: IamPolicy = proto.Field( + proto.MESSAGE, + number=11, + message=IamPolicy, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=13, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py new file mode 100644 index 00000000..357088a4 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py @@ -0,0 +1,135 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'BigQueryExport', + }, +) + + +class BigQueryExport(proto.Message): + r"""Configures how to deliver Findings to BigQuery Instance. + + Attributes: + name (str): + The relative resource name of this export. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name. + Example format: + "organizations/{organization_id}/bigQueryExports/{export_id}" + Example format: + "folders/{folder_id}/bigQueryExports/{export_id}" Example + format: "projects/{project_id}/bigQueryExports/{export_id}" + This field is provided in responses, and is ignored when + provided in create requests. + description (str): + The description of the export (max of 1024 + characters). + filter (str): + Expression that defines the filter to apply across + create/update events of findings. The expression is a list + of zero or more restrictions combined via logical operators + ``AND`` and ``OR``. Parentheses are supported, and ``OR`` + has higher precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the + corresponding resource. + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + dataset (str): + The dataset to write findings' updates to. Its format is + "projects/[project_id]/datasets/[bigquery_dataset_id]". + BigQuery Dataset unique ID must contain only letters (a-z, + A-Z), numbers (0-9), or underscores (_). + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time at which the BigQuery + export was created. This field is set by the + server and will be ignored if provided on export + on creation. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The most recent time at which + the BigQuery export was updated. This field is + set by the server and will be ignored if + provided on export creation or update. + most_recent_editor (str): + Output only. Email address of the user who + last edited the BigQuery export. This field is + set by the server and will be ignored if + provided on export creation or update. + principal (str): + Output only. The service account that needs + permission to create table and upload data to + the BigQuery dataset. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + description: str = proto.Field( + proto.STRING, + number=2, + ) + filter: str = proto.Field( + proto.STRING, + number=3, + ) + dataset: str = proto.Field( + proto.STRING, + number=4, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=6, + message=timestamp_pb2.Timestamp, + ) + most_recent_editor: str = proto.Field( + proto.STRING, + number=7, + ) + principal: str = proto.Field( + proto.STRING, + number=8, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py new file mode 100644 index 00000000..a303fc76 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py @@ -0,0 +1,60 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Compliance', + }, +) + + +class Compliance(proto.Message): + r"""Contains compliance information about a security standard + indicating unmet recommendations. + + Attributes: + standard (str): + Refers to industry wide standards or + benchmarks e.g. "cis", "pci", "owasp", etc. + version (str): + Version of the standard/benchmark e.g. 1.1 + ids (MutableSequence[str]): + Policies within the standard/benchmark e.g. + A.12.4.1 + """ + + standard: str = proto.Field( + proto.STRING, + number=1, + ) + version: str = proto.Field( + proto.STRING, + number=2, + ) + ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py new file mode 100644 index 00000000..d3c78d28 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py @@ -0,0 +1,97 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Connection', + }, +) + + +class Connection(proto.Message): + r"""Contains information about the IP connection associated with + the finding. + + Attributes: + destination_ip (str): + Destination IP address. Not present for + sockets that are listening and not connected. + destination_port (int): + Destination port. Not present for sockets + that are listening and not connected. + source_ip (str): + Source IP address. + source_port (int): + Source port. + protocol (google.cloud.securitycenter_v1.types.Connection.Protocol): + IANA Internet Protocol Number such as TCP(6) + and UDP(17). + """ + class Protocol(proto.Enum): + r"""IANA Internet Protocol Number such as TCP(6) and UDP(17). + + Values: + PROTOCOL_UNSPECIFIED (0): + Unspecified protocol (not HOPOPT). + ICMP (1): + Internet Control Message Protocol. + TCP (6): + Transmission Control Protocol. + UDP (17): + User Datagram Protocol. + GRE (47): + Generic Routing Encapsulation. + ESP (50): + Encap Security Payload. + """ + PROTOCOL_UNSPECIFIED = 0 + ICMP = 1 + TCP = 6 + UDP = 17 + GRE = 47 + ESP = 50 + + destination_ip: str = proto.Field( + proto.STRING, + number=1, + ) + destination_port: int = proto.Field( + proto.INT32, + number=2, + ) + source_ip: str = proto.Field( + proto.STRING, + number=3, + ) + source_port: int = proto.Field( + proto.INT32, + number=4, + ) + protocol: Protocol = proto.Field( + proto.ENUM, + number=5, + enum=Protocol, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py new file mode 100644 index 00000000..1610ec13 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py @@ -0,0 +1,61 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'ContactDetails', + 'Contact', + }, +) + + +class ContactDetails(proto.Message): + r"""The details pertaining to specific contacts + + Attributes: + contacts (MutableSequence[google.cloud.securitycenter_v1.types.Contact]): + A list of contacts + """ + + contacts: MutableSequence['Contact'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='Contact', + ) + + +class Contact(proto.Message): + r"""The email address of a contact. + + Attributes: + email (str): + An email address. For example, "``person123@company.com``". + """ + + email: str = proto.Field( + proto.STRING, + number=1, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py new file mode 100644 index 00000000..fec5760b --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py @@ -0,0 +1,72 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import label + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Container', + }, +) + + +class Container(proto.Message): + r"""Container associated with the finding. + + Attributes: + name (str): + Container name. + uri (str): + Container image URI provided when configuring + a pod/container. May identify a container image + version using mutable tags. + image_id (str): + Optional container image id, when provided by + the container runtime. Uniquely identifies the + container image launched using a container image + digest. + labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): + Container labels, as provided by the + container runtime. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + uri: str = proto.Field( + proto.STRING, + number=2, + ) + image_id: str = proto.Field( + proto.STRING, + number=3, + ) + labels: MutableSequence[label.Label] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message=label.Label, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py new file mode 100644 index 00000000..ba22beb7 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py @@ -0,0 +1,83 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Database', + }, +) + + +class Database(proto.Message): + r"""Represents database access information, such as queries. + A database may be a sub-resource of an instance (as in the case + of CloudSQL instances or Cloud Spanner instances), or the + database instance itself. Some database resources may not have + the full resource name populated because these resource types + are not yet supported by Cloud Asset Inventory (e.g. CloudSQL + databases). In these cases only the display name will be + provided. + + Attributes: + name (str): + The full resource name of the database the + user connected to, if it is supported by CAI. + (https://google.aip.dev/122#full-resource-names) + display_name (str): + The human readable name of the database the + user connected to. + user_name (str): + The username used to connect to the DB. This + may not necessarily be an IAM principal, and has + no required format. + query (str): + The SQL statement associated with the + relevant access. + grantees (MutableSequence[str]): + The target usernames/roles/groups of a SQL + privilege grant (not an IAM policy change). + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + user_name: str = proto.Field( + proto.STRING, + number=3, + ) + query: str = proto.Field( + proto.STRING, + number=4, + ) + grantees: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=5, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py new file mode 100644 index 00000000..f7120d2c --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py @@ -0,0 +1,104 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'EffectiveSecurityHealthAnalyticsCustomModule', + }, +) + + +class EffectiveSecurityHealthAnalyticsCustomModule(proto.Message): + r"""An EffectiveSecurityHealthAnalyticsCustomModule is the + representation of a Security Health Analytics custom module at a + specified level of the resource hierarchy: organization, folder, or + project. If a custom module is inherited from a parent organization + or folder, the value of the ``enablementState`` property in + EffectiveSecurityHealthAnalyticsCustomModule is set to the value + that is effective in the parent, instead of ``INHERITED``. For + example, if the module is enabled in a parent organization or + folder, the effective enablement_state for the module in all child + folders or projects is also ``enabled``. + EffectiveSecurityHealthAnalyticsCustomModule is read-only. + + Attributes: + name (str): + Output only. The resource name of the custom + module. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". + custom_config (google.cloud.securitycenter_v1.types.CustomConfig): + Output only. The user-specified configuration + for the module. + enablement_state (google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState): + Output only. The effective state of + enablement for the module at the given level of + the hierarchy. + display_name (str): + Output only. The display name for the custom + module. The name must be between 1 and 128 + characters, start with a lowercase letter, and + contain alphanumeric characters or underscores + only. + """ + class EnablementState(proto.Enum): + r"""The enablement state of the module. + + Values: + ENABLEMENT_STATE_UNSPECIFIED (0): + Unspecified enablement state. + ENABLED (1): + The module is enabled at the given level. + DISABLED (2): + The module is disabled at the given level. + """ + ENABLEMENT_STATE_UNSPECIFIED = 0 + ENABLED = 1 + DISABLED = 2 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + custom_config: security_health_analytics_custom_config.CustomConfig = proto.Field( + proto.MESSAGE, + number=2, + message=security_health_analytics_custom_config.CustomConfig, + ) + enablement_state: EnablementState = proto.Field( + proto.ENUM, + number=3, + enum=EnablementState, + ) + display_name: str = proto.Field( + proto.STRING, + number=4, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py new file mode 100644 index 00000000..17370e15 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py @@ -0,0 +1,89 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Exfiltration', + 'ExfilResource', + }, +) + + +class Exfiltration(proto.Message): + r"""Exfiltration represents a data exfiltration attempt of one or + more sources to one or more targets. Sources represent the + source of data that is exfiltrated, and Targets represents the + destination the data was copied to. + + Attributes: + sources (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): + If there are multiple sources, then the data + is considered "joined" between them. For + instance, BigQuery can join multiple tables, and + each table would be considered a source. + targets (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): + If there are multiple targets, each target + would get a complete copy of the "joined" source + data. + """ + + sources: MutableSequence['ExfilResource'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='ExfilResource', + ) + targets: MutableSequence['ExfilResource'] = proto.RepeatedField( + proto.MESSAGE, + number=2, + message='ExfilResource', + ) + + +class ExfilResource(proto.Message): + r"""Resource that has been exfiltrated or exfiltrated_to. + + Attributes: + name (str): + Resource's URI + (https://google.aip.dev/122#full-resource-names) + components (MutableSequence[str]): + Subcomponents of the asset that is + exfiltrated - these could be URIs used during + exfiltration, table names, databases, filenames, + etc. For example, multiple tables may be + exfiltrated from the same CloudSQL instance, or + multiple files from the same Cloud Storage + bucket. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + components: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py new file mode 100644 index 00000000..809485f6 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py @@ -0,0 +1,81 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'ExternalSystem', + }, +) + + +class ExternalSystem(proto.Message): + r"""Representation of third party SIEM/SOAR fields within SCC. + + Attributes: + name (str): + Full resource name of the external system, + for example: + "organizations/1234/sources/5678/findings/123456/externalSystems/jira", + "folders/1234/sources/5678/findings/123456/externalSystems/jira", + "projects/1234/sources/5678/findings/123456/externalSystems/jira". + assignees (MutableSequence[str]): + References primary/secondary etc assignees in + the external system. + external_uid (str): + Identifier that's used to track the given + finding in the external system. + status (str): + Most recent status of the corresponding + finding's ticket/tracker in the external system. + external_system_update_time (google.protobuf.timestamp_pb2.Timestamp): + The most recent time when the corresponding + finding's ticket/tracker was updated in the + external system. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + assignees: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=2, + ) + external_uid: str = proto.Field( + proto.STRING, + number=3, + ) + status: str = proto.Field( + proto.STRING, + number=4, + ) + external_system_update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py new file mode 100644 index 00000000..828b3580 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py @@ -0,0 +1,84 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'File', + }, +) + + +class File(proto.Message): + r"""File information about the related binary/library used by an + executable, or the script used by a script interpreter + + Attributes: + path (str): + Absolute path of the file as a JSON encoded + string. + size (int): + Size of the file in bytes. + sha256 (str): + SHA256 hash of the first hashed_size bytes of the file + encoded as a hex string. If hashed_size == size, sha256 + represents the SHA256 hash of the entire file. + hashed_size (int): + The length in bytes of the file prefix that was hashed. If + hashed_size == size, any hashes reported represent the + entire file. + partially_hashed (bool): + True when the hash covers only a prefix of + the file. + contents (str): + Prefix of the file contents as a JSON encoded + string. (Currently only populated for Malicious + Script Executed findings.) + """ + + path: str = proto.Field( + proto.STRING, + number=1, + ) + size: int = proto.Field( + proto.INT64, + number=2, + ) + sha256: str = proto.Field( + proto.STRING, + number=3, + ) + hashed_size: int = proto.Field( + proto.INT64, + number=4, + ) + partially_hashed: bool = proto.Field( + proto.BOOL, + number=5, + ) + contents: str = proto.Field( + proto.STRING, + number=6, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py new file mode 100644 index 00000000..a636b2ac --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py @@ -0,0 +1,542 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import access as gcs_access +from google.cloud.securitycenter_v1.types import compliance +from google.cloud.securitycenter_v1.types import connection +from google.cloud.securitycenter_v1.types import contact_details +from google.cloud.securitycenter_v1.types import container +from google.cloud.securitycenter_v1.types import database as gcs_database +from google.cloud.securitycenter_v1.types import exfiltration as gcs_exfiltration +from google.cloud.securitycenter_v1.types import external_system +from google.cloud.securitycenter_v1.types import file +from google.cloud.securitycenter_v1.types import iam_binding +from google.cloud.securitycenter_v1.types import indicator as gcs_indicator +from google.cloud.securitycenter_v1.types import kernel_rootkit as gcs_kernel_rootkit +from google.cloud.securitycenter_v1.types import kubernetes as gcs_kubernetes +from google.cloud.securitycenter_v1.types import mitre_attack as gcs_mitre_attack +from google.cloud.securitycenter_v1.types import process +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import vulnerability as gcs_vulnerability +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Finding', + }, +) + + +class Finding(proto.Message): + r"""Security Command Center finding. + A finding is a record of assessment data like security, risk, + health, or privacy, that is ingested into Security Command + Center for presentation, notification, analysis, policy testing, + and enforcement. For example, a cross-site scripting (XSS) + vulnerability in an App Engine application is a finding. + + Attributes: + name (str): + The relative resource name of this finding. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". + parent (str): + The relative resource name of the source the finding belongs + to. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + This field is immutable after creation time. For example: + "organizations/{organization_id}/sources/{source_id}". + resource_name (str): + For findings on Google Cloud resources, the full resource + name of the Google Cloud resource this finding is for. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + When the finding is for a non-Google Cloud resource, the + resourceName can be a customer or partner defined string. + This field is immutable after creation time. + state (google.cloud.securitycenter_v1.types.Finding.State): + The state of the finding. + category (str): + The additional taxonomy group within findings from a given + source. This field is immutable after creation time. + Example: "XSS_FLASH_INJECTION". + external_uri (str): + The URI that, if available, points to a web + page outside of Security Command Center where + additional information about the finding can be + found. This field is guaranteed to be either + empty or a well formed URL. + source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Source specific properties. These properties are managed by + the source that writes the finding. The key names in the + source_properties map must be between 1 and 255 characters, + and must start with a letter and contain alphanumeric + characters or underscores only. + security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): + Output only. User specified security marks. + These marks are entirely managed by the user and + come from the SecurityMarks resource that + belongs to the finding. + event_time (google.protobuf.timestamp_pb2.Timestamp): + The time the finding was first detected. If + an existing finding is updated, then this is the + time the update occurred. For example, if the + finding represents an open firewall, this + property captures the time the detector believes + the firewall became open. The accuracy is + determined by the detector. If the finding is + later resolved, then this time reflects when the + finding was resolved. This must not be set to a + value greater than the current timestamp. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the finding was created in + Security Command Center. + severity (google.cloud.securitycenter_v1.types.Finding.Severity): + The severity of the finding. This field is + managed by the source that writes the finding. + canonical_name (str): + The canonical name of the finding. It's either + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" + or + "projects/{project_number}/sources/{source_id}/findings/{finding_id}", + depending on the closest CRM ancestor of the resource + associated with the finding. + mute (google.cloud.securitycenter_v1.types.Finding.Mute): + Indicates the mute state of a finding (either + muted, unmuted or undefined). Unlike other + attributes of a finding, a finding provider + shouldn't set the value of mute. + finding_class (google.cloud.securitycenter_v1.types.Finding.FindingClass): + The class of the finding. + indicator (google.cloud.securitycenter_v1.types.Indicator): + Represents what's commonly known as an Indicator of + compromise (IoC) in computer forensics. This is an artifact + observed on a network or in an operating system that, with + high confidence, indicates a computer intrusion. Reference: + https://en.wikipedia.org/wiki/Indicator_of_compromise + vulnerability (google.cloud.securitycenter_v1.types.Vulnerability): + Represents vulnerability-specific fields like + CVE and CVSS scores. CVE stands for Common + Vulnerabilities and Exposures + (https://cve.mitre.org/about/) + mute_update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The most recent time this + finding was muted or unmuted. + external_systems (MutableMapping[str, google.cloud.securitycenter_v1.types.ExternalSystem]): + Output only. Third party SIEM/SOAR fields + within SCC, contains external system information + and external system finding fields. + mitre_attack (google.cloud.securitycenter_v1.types.MitreAttack): + MITRE ATT&CK tactics and techniques related + to this finding. See: https://attack.mitre.org + access (google.cloud.securitycenter_v1.types.Access): + Access details associated to the Finding, + such as more information on the caller, which + method was accessed, from where, etc. + connections (MutableSequence[google.cloud.securitycenter_v1.types.Connection]): + Contains information about the IP connection + associated with the finding. + mute_initiator (str): + First known as mute_annotation. Records additional + information about the mute operation e.g. mute config that + muted the finding, user who muted the finding, etc. Unlike + other attributes of a finding, a finding provider shouldn't + set the value of mute. + processes (MutableSequence[google.cloud.securitycenter_v1.types.Process]): + Represents operating system processes + associated with the Finding. + contacts (MutableMapping[str, google.cloud.securitycenter_v1.types.ContactDetails]): + Output only. Map containing the points of contact for the + given finding. The key represents the type of contact, while + the value contains a list of all the contacts that pertain. + Please refer to: + https://cloud.google.com/resource-manager/docs/managing-notification-contacts#notification-categories + + :: + + { + "security": { + "contacts": [ + { + "email": "person1@company.com" + }, + { + "email": "person2@company.com" + } + ] + } + } + compliances (MutableSequence[google.cloud.securitycenter_v1.types.Compliance]): + Contains compliance information for security + standards associated to the finding. + parent_display_name (str): + Output only. The human readable display name + of the finding source such as "Event Threat + Detection" or "Security Health Analytics". + description (str): + Contains more detail about the finding. + exfiltration (google.cloud.securitycenter_v1.types.Exfiltration): + Represents exfiltration associated with the + Finding. + iam_bindings (MutableSequence[google.cloud.securitycenter_v1.types.IamBinding]): + Represents IAM bindings associated with the + Finding. + next_steps (str): + Next steps associate to the finding. + module_name (str): + Unique identifier of the module which + generated the finding. Example: + folders/598186756061/securityHealthAnalyticsSettings/customModules/56799441161885 + containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): + Containers associated with the finding. + containers provides information for both + Kubernetes and non-Kubernetes containers. + kubernetes (google.cloud.securitycenter_v1.types.Kubernetes): + Kubernetes resources associated with the + finding. + database (google.cloud.securitycenter_v1.types.Database): + Database associated with the finding. + files (MutableSequence[google.cloud.securitycenter_v1.types.File]): + File associated with the finding. + kernel_rootkit (google.cloud.securitycenter_v1.types.KernelRootkit): + Kernel Rootkit signature. + """ + class State(proto.Enum): + r"""The state of the finding. + + Values: + STATE_UNSPECIFIED (0): + Unspecified state. + ACTIVE (1): + The finding requires attention and has not + been addressed yet. + INACTIVE (2): + The finding has been fixed, triaged as a + non-issue or otherwise addressed and is no + longer active. + """ + STATE_UNSPECIFIED = 0 + ACTIVE = 1 + INACTIVE = 2 + + class Severity(proto.Enum): + r"""The severity of the finding. + + Values: + SEVERITY_UNSPECIFIED (0): + This value is used for findings when a source + doesn't write a severity value. + CRITICAL (1): + Vulnerability: + A critical vulnerability is easily discoverable + by an external actor, exploitable, and results + in the direct ability to execute arbitrary code, + exfiltrate data, and otherwise gain additional + access and privileges to cloud resources and + workloads. Examples include publicly accessible + unprotected user data, public SSH access with + weak or no passwords, etc. + Threat: + Indicates a threat that is able to access, + modify, or delete data or execute unauthorized + code within existing resources. + HIGH (2): + Vulnerability: + A high risk vulnerability can be easily + discovered and exploited in combination with + other vulnerabilities in order to gain direct + access and the ability to execute arbitrary + code, exfiltrate data, and otherwise gain + additional access and privileges to cloud + resources and workloads. An example is a + database with weak or no passwords that is only + accessible internally. This database could + easily be compromised by an actor that had + access to the internal network. + Threat: + Indicates a threat that is able to create new + computational resources in an environment but + not able to access data or execute code in + existing resources. + MEDIUM (3): + Vulnerability: + A medium risk vulnerability could be used by an + actor to gain access to resources or privileges + that enable them to eventually (through multiple + steps or a complex exploit) gain access and the + ability to execute arbitrary code or exfiltrate + data. An example is a service account with + access to more projects than it should have. If + an actor gains access to the service account, + they could potentially use that access to + manipulate a project the service account was not + intended to. + Threat: + Indicates a threat that is able to cause + operational impact but may not access data or + execute unauthorized code. + LOW (4): + Vulnerability: + A low risk vulnerability hampers a security + organization's ability to detect vulnerabilities + or active threats in their deployment, or + prevents the root cause investigation of + security issues. An example is monitoring and + logs being disabled for resource configurations + and access. + Threat: + Indicates a threat that has obtained minimal + access to an environment but is not able to + access data, execute code, or create resources. + """ + SEVERITY_UNSPECIFIED = 0 + CRITICAL = 1 + HIGH = 2 + MEDIUM = 3 + LOW = 4 + + class Mute(proto.Enum): + r"""Mute state a finding can be in. + + Values: + MUTE_UNSPECIFIED (0): + Unspecified. + MUTED (1): + Finding has been muted. + UNMUTED (2): + Finding has been unmuted. + UNDEFINED (4): + Finding has never been muted/unmuted. + """ + MUTE_UNSPECIFIED = 0 + MUTED = 1 + UNMUTED = 2 + UNDEFINED = 4 + + class FindingClass(proto.Enum): + r"""Represents what kind of Finding it is. + + Values: + FINDING_CLASS_UNSPECIFIED (0): + Unspecified finding class. + THREAT (1): + Describes unwanted or malicious activity. + VULNERABILITY (2): + Describes a potential weakness in software + that increases risk to Confidentiality & + Integrity & Availability. + MISCONFIGURATION (3): + Describes a potential weakness in cloud + resource/asset configuration that increases + risk. + OBSERVATION (4): + Describes a security observation that is for + informational purposes. + SCC_ERROR (5): + Describes an error that prevents some SCC + functionality. + """ + FINDING_CLASS_UNSPECIFIED = 0 + THREAT = 1 + VULNERABILITY = 2 + MISCONFIGURATION = 3 + OBSERVATION = 4 + SCC_ERROR = 5 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + parent: str = proto.Field( + proto.STRING, + number=2, + ) + resource_name: str = proto.Field( + proto.STRING, + number=3, + ) + state: State = proto.Field( + proto.ENUM, + number=4, + enum=State, + ) + category: str = proto.Field( + proto.STRING, + number=5, + ) + external_uri: str = proto.Field( + proto.STRING, + number=6, + ) + source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + event_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + severity: Severity = proto.Field( + proto.ENUM, + number=12, + enum=Severity, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=14, + ) + mute: Mute = proto.Field( + proto.ENUM, + number=15, + enum=Mute, + ) + finding_class: FindingClass = proto.Field( + proto.ENUM, + number=17, + enum=FindingClass, + ) + indicator: gcs_indicator.Indicator = proto.Field( + proto.MESSAGE, + number=18, + message=gcs_indicator.Indicator, + ) + vulnerability: gcs_vulnerability.Vulnerability = proto.Field( + proto.MESSAGE, + number=20, + message=gcs_vulnerability.Vulnerability, + ) + mute_update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=21, + message=timestamp_pb2.Timestamp, + ) + external_systems: MutableMapping[str, external_system.ExternalSystem] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=22, + message=external_system.ExternalSystem, + ) + mitre_attack: gcs_mitre_attack.MitreAttack = proto.Field( + proto.MESSAGE, + number=25, + message=gcs_mitre_attack.MitreAttack, + ) + access: gcs_access.Access = proto.Field( + proto.MESSAGE, + number=26, + message=gcs_access.Access, + ) + connections: MutableSequence[connection.Connection] = proto.RepeatedField( + proto.MESSAGE, + number=31, + message=connection.Connection, + ) + mute_initiator: str = proto.Field( + proto.STRING, + number=28, + ) + processes: MutableSequence[process.Process] = proto.RepeatedField( + proto.MESSAGE, + number=30, + message=process.Process, + ) + contacts: MutableMapping[str, contact_details.ContactDetails] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=33, + message=contact_details.ContactDetails, + ) + compliances: MutableSequence[compliance.Compliance] = proto.RepeatedField( + proto.MESSAGE, + number=34, + message=compliance.Compliance, + ) + parent_display_name: str = proto.Field( + proto.STRING, + number=36, + ) + description: str = proto.Field( + proto.STRING, + number=37, + ) + exfiltration: gcs_exfiltration.Exfiltration = proto.Field( + proto.MESSAGE, + number=38, + message=gcs_exfiltration.Exfiltration, + ) + iam_bindings: MutableSequence[iam_binding.IamBinding] = proto.RepeatedField( + proto.MESSAGE, + number=39, + message=iam_binding.IamBinding, + ) + next_steps: str = proto.Field( + proto.STRING, + number=40, + ) + module_name: str = proto.Field( + proto.STRING, + number=41, + ) + containers: MutableSequence[container.Container] = proto.RepeatedField( + proto.MESSAGE, + number=42, + message=container.Container, + ) + kubernetes: gcs_kubernetes.Kubernetes = proto.Field( + proto.MESSAGE, + number=43, + message=gcs_kubernetes.Kubernetes, + ) + database: gcs_database.Database = proto.Field( + proto.MESSAGE, + number=44, + message=gcs_database.Database, + ) + files: MutableSequence[file.File] = proto.RepeatedField( + proto.MESSAGE, + number=46, + message=file.File, + ) + kernel_rootkit: gcs_kernel_rootkit.KernelRootkit = proto.Field( + proto.MESSAGE, + number=50, + message=gcs_kernel_rootkit.KernelRootkit, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py new file mode 100644 index 00000000..06616e56 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py @@ -0,0 +1,54 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Folder', + }, +) + + +class Folder(proto.Message): + r"""Message that contains the resource name and display name of a + folder resource. + + Attributes: + resource_folder (str): + Full resource name of this folder. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_folder_display_name (str): + The user defined display name for this + folder. + """ + + resource_folder: str = proto.Field( + proto.STRING, + number=1, + ) + resource_folder_display_name: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py new file mode 100644 index 00000000..e03e9044 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py @@ -0,0 +1,76 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'IamBinding', + }, +) + + +class IamBinding(proto.Message): + r"""Represents a particular IAM binding, which captures a + member's role addition, removal, or state. + + Attributes: + action (google.cloud.securitycenter_v1.types.IamBinding.Action): + The action that was performed on a Binding. + role (str): + Role that is assigned to "members". + For example, "roles/viewer", "roles/editor", or + "roles/owner". + member (str): + A single identity requesting access for a + Cloud Platform resource, e.g. "foo@google.com". + """ + class Action(proto.Enum): + r"""The type of action performed on a Binding in a policy. + + Values: + ACTION_UNSPECIFIED (0): + Unspecified. + ADD (1): + Addition of a Binding. + REMOVE (2): + Removal of a Binding. + """ + ACTION_UNSPECIFIED = 0 + ADD = 1 + REMOVE = 2 + + action: Action = proto.Field( + proto.ENUM, + number=1, + enum=Action, + ) + role: str = proto.Field( + proto.STRING, + number=2, + ) + member: str = proto.Field( + proto.STRING, + number=3, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py new file mode 100644 index 00000000..13bfe863 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py @@ -0,0 +1,164 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Indicator', + }, +) + + +class Indicator(proto.Message): + r"""Represents what's commonly known as an *indicator of compromise* + (IoC) in computer forensics. This is an artifact observed on a + network or in an operating system that, with high confidence, + indicates a computer intrusion. For more information, see `Indicator + of + compromise `__. + + Attributes: + ip_addresses (MutableSequence[str]): + The list of IP addresses that are associated + with the finding. + domains (MutableSequence[str]): + List of domains associated to the Finding. + signatures (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature]): + The list of matched signatures indicating + that the given process is present in the + environment. + uris (MutableSequence[str]): + The list of URIs associated to the Findings. + """ + + class ProcessSignature(proto.Message): + r"""Indicates what signature matched this process. + + This message has `oneof`_ fields (mutually exclusive fields). + For each oneof, at most one member field can be set at the same time. + Setting any member of the oneof automatically clears all other + members. + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + memory_hash_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature): + Signature indicating that a binary family was + matched. + + This field is a member of `oneof`_ ``signature``. + yara_rule_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.YaraRuleSignature): + Signature indicating that a YARA rule was + matched. + + This field is a member of `oneof`_ ``signature``. + """ + + class MemoryHashSignature(proto.Message): + r"""A signature corresponding to memory page hashes. + + Attributes: + binary_family (str): + The binary family. + detections (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature.Detection]): + The list of memory hash detections + contributing to the binary family match. + """ + + class Detection(proto.Message): + r"""Memory hash detection contributing to the binary family + match. + + Attributes: + binary (str): + The name of the binary associated with the + memory hash signature detection. + percent_pages_matched (float): + The percentage of memory page hashes in the + signature that were matched. + """ + + binary: str = proto.Field( + proto.STRING, + number=2, + ) + percent_pages_matched: float = proto.Field( + proto.DOUBLE, + number=3, + ) + + binary_family: str = proto.Field( + proto.STRING, + number=1, + ) + detections: MutableSequence['Indicator.ProcessSignature.MemoryHashSignature.Detection'] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message='Indicator.ProcessSignature.MemoryHashSignature.Detection', + ) + + class YaraRuleSignature(proto.Message): + r"""A signature corresponding to a YARA rule. + + Attributes: + yara_rule (str): + The name of the YARA rule. + """ + + yara_rule: str = proto.Field( + proto.STRING, + number=5, + ) + + memory_hash_signature: 'Indicator.ProcessSignature.MemoryHashSignature' = proto.Field( + proto.MESSAGE, + number=6, + oneof='signature', + message='Indicator.ProcessSignature.MemoryHashSignature', + ) + yara_rule_signature: 'Indicator.ProcessSignature.YaraRuleSignature' = proto.Field( + proto.MESSAGE, + number=7, + oneof='signature', + message='Indicator.ProcessSignature.YaraRuleSignature', + ) + + ip_addresses: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + domains: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=2, + ) + signatures: MutableSequence[ProcessSignature] = proto.RepeatedField( + proto.MESSAGE, + number=3, + message=ProcessSignature, + ) + uris: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=4, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py new file mode 100644 index 00000000..1d8bd124 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py @@ -0,0 +1,108 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'KernelRootkit', + }, +) + + +class KernelRootkit(proto.Message): + r"""Kernel mode rootkit signatures. + + Attributes: + name (str): + Rootkit name when available. + unexpected_code_modification (bool): + True when unexpected modifications of kernel + code memory are present. + unexpected_read_only_data_modification (bool): + True when unexpected modifications of kernel + read-only data memory are present. + unexpected_ftrace_handler (bool): + True when ``ftrace`` points are present with callbacks + pointing to regions that are not in the expected kernel or + module code range. + unexpected_kprobe_handler (bool): + True when ``kprobe`` points are present with callbacks + pointing to regions that are not in the expected kernel or + module code range. + unexpected_kernel_code_pages (bool): + True when kernel code pages that are not in + the expected kernel or module code regions are + present. + unexpected_system_call_handler (bool): + True when system call handlers that are are + not in the expected kernel or module code + regions are present. + unexpected_interrupt_handler (bool): + True when interrupt handlers that are are not + in the expected kernel or module code regions + are present. + unexpected_processes_in_runqueue (bool): + True when unexpected processes in the + scheduler run queue are present. Such processes + are in the run queue, but not in the process + task list. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + unexpected_code_modification: bool = proto.Field( + proto.BOOL, + number=2, + ) + unexpected_read_only_data_modification: bool = proto.Field( + proto.BOOL, + number=3, + ) + unexpected_ftrace_handler: bool = proto.Field( + proto.BOOL, + number=4, + ) + unexpected_kprobe_handler: bool = proto.Field( + proto.BOOL, + number=5, + ) + unexpected_kernel_code_pages: bool = proto.Field( + proto.BOOL, + number=6, + ) + unexpected_system_call_handler: bool = proto.Field( + proto.BOOL, + number=7, + ) + unexpected_interrupt_handler: bool = proto.Field( + proto.BOOL, + number=8, + ) + unexpected_processes_in_runqueue: bool = proto.Field( + proto.BOOL, + number=9, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py new file mode 100644 index 00000000..98071521 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py @@ -0,0 +1,338 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import container +from google.cloud.securitycenter_v1.types import label + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Kubernetes', + }, +) + + +class Kubernetes(proto.Message): + r"""Kubernetes-related attributes. + + Attributes: + pods (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Pod]): + Kubernetes Pods associated with the finding. + This field will contain Pod records for each + container that is owned by a Pod. + nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): + Provides Kubernetes Node information. + node_pools (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.NodePool]): + GKE Node Pools associated with the finding. + This field will contain NodePool information for + each Node, when it is available. + roles (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Role]): + Provides Kubernetes role information for + findings that involve Roles or ClusterRoles. + bindings (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Binding]): + Provides Kubernetes role binding information + for findings that involve RoleBindings or + ClusterRoleBindings. + access_reviews (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.AccessReview]): + Provides information on any Kubernetes access + reviews (i.e. privilege checks) relevant to the + finding. + """ + + class Pod(proto.Message): + r"""Kubernetes Pod. + + Attributes: + ns (str): + Kubernetes Pod namespace. + name (str): + Kubernetes Pod name. + labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): + Pod labels. For Kubernetes containers, these + are applied to the container. + containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): + Pod containers associated with this finding, + if any. + """ + + ns: str = proto.Field( + proto.STRING, + number=1, + ) + name: str = proto.Field( + proto.STRING, + number=2, + ) + labels: MutableSequence[label.Label] = proto.RepeatedField( + proto.MESSAGE, + number=3, + message=label.Label, + ) + containers: MutableSequence[container.Container] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message=container.Container, + ) + + class Node(proto.Message): + r"""Kubernetes Nodes associated with the finding. + + Attributes: + name (str): + Full Resource name of the Compute Engine VM + running the cluster node. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class NodePool(proto.Message): + r"""Provides GKE Node Pool information. + + Attributes: + name (str): + Kubernetes Node pool name. + nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): + Nodes associated with the finding. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + nodes: MutableSequence['Kubernetes.Node'] = proto.RepeatedField( + proto.MESSAGE, + number=2, + message='Kubernetes.Node', + ) + + class Role(proto.Message): + r"""Kubernetes Role or ClusterRole. + + Attributes: + kind (google.cloud.securitycenter_v1.types.Kubernetes.Role.Kind): + Role type. + ns (str): + Role namespace. + name (str): + Role name. + """ + class Kind(proto.Enum): + r"""Types of Kubernetes roles. + + Values: + KIND_UNSPECIFIED (0): + Role type is not specified. + ROLE (1): + Kubernetes Role. + CLUSTER_ROLE (2): + Kubernetes ClusterRole. + """ + KIND_UNSPECIFIED = 0 + ROLE = 1 + CLUSTER_ROLE = 2 + + kind: 'Kubernetes.Role.Kind' = proto.Field( + proto.ENUM, + number=1, + enum='Kubernetes.Role.Kind', + ) + ns: str = proto.Field( + proto.STRING, + number=2, + ) + name: str = proto.Field( + proto.STRING, + number=3, + ) + + class Binding(proto.Message): + r"""Represents a Kubernetes RoleBinding or ClusterRoleBinding. + + Attributes: + ns (str): + Namespace for binding. + name (str): + Name for binding. + role (google.cloud.securitycenter_v1.types.Kubernetes.Role): + The Role or ClusterRole referenced by the + binding. + subjects (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Subject]): + Represents one or more subjects that are + bound to the role. Not always available for + PATCH requests. + """ + + ns: str = proto.Field( + proto.STRING, + number=1, + ) + name: str = proto.Field( + proto.STRING, + number=2, + ) + role: 'Kubernetes.Role' = proto.Field( + proto.MESSAGE, + number=3, + message='Kubernetes.Role', + ) + subjects: MutableSequence['Kubernetes.Subject'] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message='Kubernetes.Subject', + ) + + class Subject(proto.Message): + r"""Represents a Kubernetes Subject. + + Attributes: + kind (google.cloud.securitycenter_v1.types.Kubernetes.Subject.AuthType): + Authentication type for subject. + ns (str): + Namespace for subject. + name (str): + Name for subject. + """ + class AuthType(proto.Enum): + r"""Auth types that can be used for Subject's kind field. + + Values: + AUTH_TYPE_UNSPECIFIED (0): + Authentication is not specified. + USER (1): + User with valid certificate. + SERVICEACCOUNT (2): + Users managed by Kubernetes API with + credentials stored as Secrets. + GROUP (3): + Collection of users. + """ + AUTH_TYPE_UNSPECIFIED = 0 + USER = 1 + SERVICEACCOUNT = 2 + GROUP = 3 + + kind: 'Kubernetes.Subject.AuthType' = proto.Field( + proto.ENUM, + number=1, + enum='Kubernetes.Subject.AuthType', + ) + ns: str = proto.Field( + proto.STRING, + number=2, + ) + name: str = proto.Field( + proto.STRING, + number=3, + ) + + class AccessReview(proto.Message): + r"""Conveys information about a Kubernetes access review (e.g. + kubectl auth can-i ...) that was involved in a finding. + + Attributes: + group (str): + Group is the API Group of the Resource. "*" means all. + ns (str): + Namespace of the action being requested. + Currently, there is no distinction between no + namespace and all namespaces. Both are + represented by "" (empty). + name (str): + Name is the name of the resource being + requested. Empty means all. + resource (str): + Resource is the optional resource type requested. "*" means + all. + subresource (str): + Subresource is the optional subresource type. + verb (str): + Verb is a Kubernetes resource API verb, like: get, list, + watch, create, update, delete, proxy. "*" means all. + version (str): + Version is the API Version of the Resource. "*" means all. + """ + + group: str = proto.Field( + proto.STRING, + number=1, + ) + ns: str = proto.Field( + proto.STRING, + number=2, + ) + name: str = proto.Field( + proto.STRING, + number=3, + ) + resource: str = proto.Field( + proto.STRING, + number=4, + ) + subresource: str = proto.Field( + proto.STRING, + number=5, + ) + verb: str = proto.Field( + proto.STRING, + number=6, + ) + version: str = proto.Field( + proto.STRING, + number=7, + ) + + pods: MutableSequence[Pod] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=Pod, + ) + nodes: MutableSequence[Node] = proto.RepeatedField( + proto.MESSAGE, + number=2, + message=Node, + ) + node_pools: MutableSequence[NodePool] = proto.RepeatedField( + proto.MESSAGE, + number=3, + message=NodePool, + ) + roles: MutableSequence[Role] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message=Role, + ) + bindings: MutableSequence[Binding] = proto.RepeatedField( + proto.MESSAGE, + number=5, + message=Binding, + ) + access_reviews: MutableSequence[AccessReview] = proto.RepeatedField( + proto.MESSAGE, + number=6, + message=AccessReview, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py new file mode 100644 index 00000000..e2ef5ee3 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py @@ -0,0 +1,53 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Label', + }, +) + + +class Label(proto.Message): + r"""Label represents a generic name=value label. Label has + separate name and value fields to support filtering with + contains(). + + Attributes: + name (str): + Label name. + value (str): + Label value. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + value: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py new file mode 100644 index 00000000..9b1bee93 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py @@ -0,0 +1,252 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'MitreAttack', + }, +) + + +class MitreAttack(proto.Message): + r"""MITRE ATT&CK tactics and techniques related to this finding. + See: https://attack.mitre.org + + Attributes: + primary_tactic (google.cloud.securitycenter_v1.types.MitreAttack.Tactic): + The MITRE ATT&CK tactic most closely + represented by this finding, if any. + primary_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): + The MITRE ATT&CK technique most closely represented by this + finding, if any. primary_techniques is a repeated field + because there are multiple levels of MITRE ATT&CK + techniques. If the technique most closely represented by + this finding is a sub-technique (e.g. + ``SCANNING_IP_BLOCKS``), both the sub-technique and its + parent technique(s) will be listed (e.g. + ``SCANNING_IP_BLOCKS``, ``ACTIVE_SCANNING``). + additional_tactics (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Tactic]): + Additional MITRE ATT&CK tactics related to + this finding, if any. + additional_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): + Additional MITRE ATT&CK techniques related to + this finding, if any, along with any of their + respective parent techniques. + version (str): + The MITRE ATT&CK version referenced by the + above fields. E.g. "8". + """ + class Tactic(proto.Enum): + r"""MITRE ATT&CK tactics that can be referenced by SCC findings. + See: https://attack.mitre.org/tactics/enterprise/ + + Values: + TACTIC_UNSPECIFIED (0): + Unspecified value. + RECONNAISSANCE (1): + TA0043 + RESOURCE_DEVELOPMENT (2): + TA0042 + INITIAL_ACCESS (5): + TA0001 + EXECUTION (3): + TA0002 + PERSISTENCE (6): + TA0003 + PRIVILEGE_ESCALATION (8): + TA0004 + DEFENSE_EVASION (7): + TA0005 + CREDENTIAL_ACCESS (9): + TA0006 + DISCOVERY (10): + TA0007 + LATERAL_MOVEMENT (11): + TA0008 + COLLECTION (12): + TA0009 + COMMAND_AND_CONTROL (4): + TA0011 + EXFILTRATION (13): + TA0010 + IMPACT (14): + TA0040 + """ + TACTIC_UNSPECIFIED = 0 + RECONNAISSANCE = 1 + RESOURCE_DEVELOPMENT = 2 + INITIAL_ACCESS = 5 + EXECUTION = 3 + PERSISTENCE = 6 + PRIVILEGE_ESCALATION = 8 + DEFENSE_EVASION = 7 + CREDENTIAL_ACCESS = 9 + DISCOVERY = 10 + LATERAL_MOVEMENT = 11 + COLLECTION = 12 + COMMAND_AND_CONTROL = 4 + EXFILTRATION = 13 + IMPACT = 14 + + class Technique(proto.Enum): + r"""MITRE ATT&CK techniques that can be referenced by SCC + findings. See: https://attack.mitre.org/techniques/enterprise/ + + Values: + TECHNIQUE_UNSPECIFIED (0): + Unspecified value. + ACTIVE_SCANNING (1): + T1595 + SCANNING_IP_BLOCKS (2): + T1595.001 + INGRESS_TOOL_TRANSFER (3): + T1105 + NATIVE_API (4): + T1106 + SHARED_MODULES (5): + T1129 + COMMAND_AND_SCRIPTING_INTERPRETER (6): + T1059 + UNIX_SHELL (7): + T1059.004 + RESOURCE_HIJACKING (8): + T1496 + PROXY (9): + T1090 + EXTERNAL_PROXY (10): + T1090.002 + MULTI_HOP_PROXY (11): + T1090.003 + DYNAMIC_RESOLUTION (12): + T1568 + UNSECURED_CREDENTIALS (13): + T1552 + VALID_ACCOUNTS (14): + T1078 + LOCAL_ACCOUNTS (15): + T1078.003 + CLOUD_ACCOUNTS (16): + T1078.004 + NETWORK_DENIAL_OF_SERVICE (17): + T1498 + PERMISSION_GROUPS_DISCOVERY (18): + T1069 + CLOUD_GROUPS (19): + T1069.003 + EXFILTRATION_OVER_WEB_SERVICE (20): + T1567 + EXFILTRATION_TO_CLOUD_STORAGE (21): + T1567.002 + ACCOUNT_MANIPULATION (22): + T1098 + SSH_AUTHORIZED_KEYS (23): + T1098.004 + CREATE_OR_MODIFY_SYSTEM_PROCESS (24): + T1543 + STEAL_WEB_SESSION_COOKIE (25): + T1539 + MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE (26): + T1578 + EXPLOIT_PUBLIC_FACING_APPLICATION (27): + T1190 + MODIFY_AUTHENTICATION_PROCESS (28): + T1556 + DATA_DESTRUCTION (29): + T1485 + DOMAIN_POLICY_MODIFICATION (30): + T1484 + IMPAIR_DEFENSES (31): + T1562 + NETWORK_SERVICE_DISCOVERY (32): + T1046 + ACCESS_TOKEN_MANIPULATION (33): + T1134 + ABUSE_ELEVATION_CONTROL_MECHANISM (34): + T1548 + DEFAULT_ACCOUNTS (35): + T1078.001 + """ + TECHNIQUE_UNSPECIFIED = 0 + ACTIVE_SCANNING = 1 + SCANNING_IP_BLOCKS = 2 + INGRESS_TOOL_TRANSFER = 3 + NATIVE_API = 4 + SHARED_MODULES = 5 + COMMAND_AND_SCRIPTING_INTERPRETER = 6 + UNIX_SHELL = 7 + RESOURCE_HIJACKING = 8 + PROXY = 9 + EXTERNAL_PROXY = 10 + MULTI_HOP_PROXY = 11 + DYNAMIC_RESOLUTION = 12 + UNSECURED_CREDENTIALS = 13 + VALID_ACCOUNTS = 14 + LOCAL_ACCOUNTS = 15 + CLOUD_ACCOUNTS = 16 + NETWORK_DENIAL_OF_SERVICE = 17 + PERMISSION_GROUPS_DISCOVERY = 18 + CLOUD_GROUPS = 19 + EXFILTRATION_OVER_WEB_SERVICE = 20 + EXFILTRATION_TO_CLOUD_STORAGE = 21 + ACCOUNT_MANIPULATION = 22 + SSH_AUTHORIZED_KEYS = 23 + CREATE_OR_MODIFY_SYSTEM_PROCESS = 24 + STEAL_WEB_SESSION_COOKIE = 25 + MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE = 26 + EXPLOIT_PUBLIC_FACING_APPLICATION = 27 + MODIFY_AUTHENTICATION_PROCESS = 28 + DATA_DESTRUCTION = 29 + DOMAIN_POLICY_MODIFICATION = 30 + IMPAIR_DEFENSES = 31 + NETWORK_SERVICE_DISCOVERY = 32 + ACCESS_TOKEN_MANIPULATION = 33 + ABUSE_ELEVATION_CONTROL_MECHANISM = 34 + DEFAULT_ACCOUNTS = 35 + + primary_tactic: Tactic = proto.Field( + proto.ENUM, + number=1, + enum=Tactic, + ) + primary_techniques: MutableSequence[Technique] = proto.RepeatedField( + proto.ENUM, + number=2, + enum=Technique, + ) + additional_tactics: MutableSequence[Tactic] = proto.RepeatedField( + proto.ENUM, + number=3, + enum=Tactic, + ) + additional_techniques: MutableSequence[Technique] = proto.RepeatedField( + proto.ENUM, + number=4, + enum=Technique, + ) + version: str = proto.Field( + proto.STRING, + number=5, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py new file mode 100644 index 00000000..b3ec0987 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py @@ -0,0 +1,120 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'MuteConfig', + }, +) + + +class MuteConfig(proto.Message): + r"""A mute config is a Cloud SCC resource that contains the + configuration to mute create/update events of findings. + + Attributes: + name (str): + This field will be ignored if provided on config creation. + Format + "organizations/{organization}/muteConfigs/{mute_config}" + "folders/{folder}/muteConfigs/{mute_config}" + "projects/{project}/muteConfigs/{mute_config}". + display_name (str): + The human readable name to be displayed for + the mute config. + description (str): + A description of the mute config. + filter (str): + Required. An expression that defines the filter to apply + across create/update events of findings. While creating a + filter string, be mindful of the scope in which the mute + configuration is being created. E.g., If a filter contains + project = X but is created under the project = Y scope, it + might not match any findings. + + The following field and operator combinations are supported: + + - severity: ``=``, ``:`` + - category: ``=``, ``:`` + - resource.name: ``=``, ``:`` + - resource.project_name: ``=``, ``:`` + - resource.project_display_name: ``=``, ``:`` + - resource.folders.resource_folder: ``=``, ``:`` + - resource.parent_name: ``=``, ``:`` + - resource.parent_display_name: ``=``, ``:`` + - resource.type: ``=``, ``:`` + - finding_class: ``=``, ``:`` + - indicator.ip_addresses: ``=``, ``:`` + - indicator.domains: ``=``, ``:`` + create_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time at which the mute + config was created. This field is set by the + server and will be ignored if provided on config + creation. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The most recent time at which + the mute config was updated. This field is set + by the server and will be ignored if provided on + config creation or update. + most_recent_editor (str): + Output only. Email address of the user who + last edited the mute config. This field is set + by the server and will be ignored if provided on + config creation or update. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + description: str = proto.Field( + proto.STRING, + number=3, + ) + filter: str = proto.Field( + proto.STRING, + number=4, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=6, + message=timestamp_pb2.Timestamp, + ) + most_recent_editor: str = proto.Field( + proto.STRING, + number=7, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py new file mode 100644 index 00000000..c6061740 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py @@ -0,0 +1,127 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'NotificationConfig', + }, +) + + +class NotificationConfig(proto.Message): + r"""Cloud Security Command Center (Cloud SCC) notification + configs. + A notification config is a Cloud SCC resource that contains the + configuration to send notifications for create/update events of + findings, assets and etc. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + name (str): + The relative resource name of this notification config. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/notificationConfigs/notify_public_bucket", + "folders/{folder_id}/notificationConfigs/notify_public_bucket", + or + "projects/{project_id}/notificationConfigs/notify_public_bucket". + description (str): + The description of the notification config + (max of 1024 characters). + pubsub_topic (str): + The Pub/Sub topic to send notifications to. Its format is + "projects/[project_id]/topics/[topic]". + service_account (str): + Output only. The service account that needs + "pubsub.topics.publish" permission to publish to + the Pub/Sub topic. + streaming_config (google.cloud.securitycenter_v1.types.NotificationConfig.StreamingConfig): + The config for triggering streaming-based + notifications. + + This field is a member of `oneof`_ ``notify_config``. + """ + + class StreamingConfig(proto.Message): + r"""The config for streaming-based notifications, which send each + event as soon as it is detected. + + Attributes: + filter (str): + Expression that defines the filter to apply across + create/update events of assets or findings as specified by + the event type. The expression is a list of zero or more + restrictions combined via logical operators ``AND`` and + ``OR``. Parentheses are supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the + corresponding resource. + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + """ + + filter: str = proto.Field( + proto.STRING, + number=1, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + description: str = proto.Field( + proto.STRING, + number=2, + ) + pubsub_topic: str = proto.Field( + proto.STRING, + number=3, + ) + service_account: str = proto.Field( + proto.STRING, + number=4, + ) + streaming_config: StreamingConfig = proto.Field( + proto.MESSAGE, + number=5, + oneof='notify_config', + message=StreamingConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py new file mode 100644 index 00000000..79e26c0f --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py @@ -0,0 +1,70 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import resource as gcs_resource + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'NotificationMessage', + }, +) + + +class NotificationMessage(proto.Message): + r"""Cloud SCC's Notification + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + notification_config_name (str): + Name of the notification config that + generated current notification. + finding (google.cloud.securitycenter_v1.types.Finding): + If it's a Finding based notification config, + this field will be populated. + + This field is a member of `oneof`_ ``event``. + resource (google.cloud.securitycenter_v1.types.Resource): + The Cloud resource tied to this + notification's Finding. + """ + + notification_config_name: str = proto.Field( + proto.STRING, + number=1, + ) + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=2, + oneof='event', + message=gcs_finding.Finding, + ) + resource: gcs_resource.Resource = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_resource.Resource, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py new file mode 100644 index 00000000..54c80c60 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py @@ -0,0 +1,123 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'OrganizationSettings', + }, +) + + +class OrganizationSettings(proto.Message): + r"""User specified settings that are attached to the Security + Command Center organization. + + Attributes: + name (str): + The relative resource name of the settings. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/organizationSettings". + enable_asset_discovery (bool): + A flag that indicates if Asset Discovery should be enabled. + If the flag is set to ``true``, then discovery of assets + will occur. If it is set to \`false, all historical assets + will remain, but discovery of future assets will not occur. + asset_discovery_config (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig): + The configuration used for Asset Discovery + runs. + """ + + class AssetDiscoveryConfig(proto.Message): + r"""The configuration used for Asset Discovery runs. + + Attributes: + project_ids (MutableSequence[str]): + The project ids to use for filtering asset + discovery. + inclusion_mode (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): + The mode to use for filtering asset + discovery. + folder_ids (MutableSequence[str]): + The folder ids to use for filtering asset + discovery. It consists of only digits, e.g., + 756619654966. + """ + class InclusionMode(proto.Enum): + r"""The mode of inclusion when running Asset Discovery. Asset discovery + can be limited by explicitly identifying projects to be included or + excluded. If INCLUDE_ONLY is set, then only those projects within + the organization and their children are discovered during asset + discovery. If EXCLUDE is set, then projects that don't match those + projects are discovered during asset discovery. If neither are set, + then all projects within the organization are discovered during + asset discovery. + + Values: + INCLUSION_MODE_UNSPECIFIED (0): + Unspecified. Setting the mode with this value + will disable inclusion/exclusion filtering for + Asset Discovery. + INCLUDE_ONLY (1): + Asset Discovery will capture only the + resources within the projects specified. All + other resources will be ignored. + EXCLUDE (2): + Asset Discovery will ignore all resources + under the projects specified. All other + resources will be retrieved. + """ + INCLUSION_MODE_UNSPECIFIED = 0 + INCLUDE_ONLY = 1 + EXCLUDE = 2 + + project_ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( + proto.ENUM, + number=2, + enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', + ) + folder_ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + enable_asset_discovery: bool = proto.Field( + proto.BOOL, + number=2, + ) + asset_discovery_config: AssetDiscoveryConfig = proto.Field( + proto.MESSAGE, + number=3, + message=AssetDiscoveryConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py new file mode 100644 index 00000000..3cd886e5 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py @@ -0,0 +1,135 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import file + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Process', + 'EnvironmentVariable', + }, +) + + +class Process(proto.Message): + r"""Represents an operating system process. + + Attributes: + name (str): + The process name visible in utilities like ``top`` and + ``ps``; it can be accessed via ``/proc/[pid]/comm`` and + changed with ``prctl(PR_SET_NAME)``. + binary (google.cloud.securitycenter_v1.types.File): + File information for the process executable. + libraries (MutableSequence[google.cloud.securitycenter_v1.types.File]): + File information for libraries loaded by the + process. + script (google.cloud.securitycenter_v1.types.File): + When the process represents the invocation of a script, + ``binary`` provides information about the interpreter while + ``script`` provides information about the script file + provided to the interpreter. + args (MutableSequence[str]): + Process arguments as JSON encoded strings. + arguments_truncated (bool): + True if ``args`` is incomplete. + env_variables (MutableSequence[google.cloud.securitycenter_v1.types.EnvironmentVariable]): + Process environment variables. + env_variables_truncated (bool): + True if ``env_variables`` is incomplete. + pid (int): + The process id. + parent_pid (int): + The parent process id. + """ + + name: str = proto.Field( + proto.STRING, + number=12, + ) + binary: file.File = proto.Field( + proto.MESSAGE, + number=3, + message=file.File, + ) + libraries: MutableSequence[file.File] = proto.RepeatedField( + proto.MESSAGE, + number=4, + message=file.File, + ) + script: file.File = proto.Field( + proto.MESSAGE, + number=5, + message=file.File, + ) + args: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=6, + ) + arguments_truncated: bool = proto.Field( + proto.BOOL, + number=7, + ) + env_variables: MutableSequence['EnvironmentVariable'] = proto.RepeatedField( + proto.MESSAGE, + number=8, + message='EnvironmentVariable', + ) + env_variables_truncated: bool = proto.Field( + proto.BOOL, + number=9, + ) + pid: int = proto.Field( + proto.INT64, + number=10, + ) + parent_pid: int = proto.Field( + proto.INT64, + number=11, + ) + + +class EnvironmentVariable(proto.Message): + r"""EnvironmentVariable is a name-value pair to store environment + variables for Process. + + Attributes: + name (str): + Environment variable name as a JSON encoded + string. + val (str): + Environment variable value as a JSON encoded + string. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + val: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py new file mode 100644 index 00000000..5c6cfad9 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py @@ -0,0 +1,96 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import folder + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Resource', + }, +) + + +class Resource(proto.Message): + r"""Information related to the Google Cloud resource. + + Attributes: + name (str): + The full resource name of the resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + display_name (str): + The human readable name of the resource. + type_ (str): + The full resource type of the resource. + project (str): + The full resource name of project that the + resource belongs to. + project_display_name (str): + The project ID that the resource belongs to. + parent (str): + The full resource name of resource's parent. + parent_display_name (str): + The human readable name of resource's parent. + folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): + Output only. Contains a Folder message for + each folder in the assets ancestry. The first + folder is the deepest nested folder, and the + last folder is the folder directly under the + Organization. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=8, + ) + type_: str = proto.Field( + proto.STRING, + number=6, + ) + project: str = proto.Field( + proto.STRING, + number=2, + ) + project_display_name: str = proto.Field( + proto.STRING, + number=3, + ) + parent: str = proto.Field( + proto.STRING, + number=4, + ) + parent_display_name: str = proto.Field( + proto.STRING, + number=5, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=7, + message=folder.Folder, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py new file mode 100644 index 00000000..11a7f0e2 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py @@ -0,0 +1,76 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import duration_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'RunAssetDiscoveryResponse', + }, +) + + +class RunAssetDiscoveryResponse(proto.Message): + r"""Response of asset discovery run + + Attributes: + state (google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse.State): + The state of an asset discovery run. + duration (google.protobuf.duration_pb2.Duration): + The duration between asset discovery run + start and end + """ + class State(proto.Enum): + r"""The state of an asset discovery run. + + Values: + STATE_UNSPECIFIED (0): + Asset discovery run state was unspecified. + COMPLETED (1): + Asset discovery run completed successfully. + SUPERSEDED (2): + Asset discovery run was cancelled with tasks + still pending, as another run for the same + organization was started with a higher priority. + TERMINATED (3): + Asset discovery run was killed and + terminated. + """ + STATE_UNSPECIFIED = 0 + COMPLETED = 1 + SUPERSEDED = 2 + TERMINATED = 3 + + state: State = proto.Field( + proto.ENUM, + number=1, + enum=State, + ) + duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=2, + message=duration_pb2.Duration, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py new file mode 100644 index 00000000..4f885a80 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py @@ -0,0 +1,173 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.type import expr_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'CustomConfig', + }, +) + + +class CustomConfig(proto.Message): + r"""Defines the properties in a custom module configuration for + Security Health Analytics. Use the custom module configuration + to create custom detectors that generate custom findings for + resources that you specify. + + Attributes: + predicate (google.type.expr_pb2.Expr): + The CEL expression to evaluate to produce + findings. When the expression evaluates to true + against a resource, a finding is generated. + custom_output (google.cloud.securitycenter_v1.types.CustomConfig.CustomOutputSpec): + Custom output properties. + resource_selector (google.cloud.securitycenter_v1.types.CustomConfig.ResourceSelector): + The resource types that the custom module + operates on. Each custom module can specify up + to 5 resource types. + severity (google.cloud.securitycenter_v1.types.CustomConfig.Severity): + The severity to assign to findings generated + by the module. + description (str): + Text that describes the vulnerability or + misconfiguration that the custom module detects. + This explanation is returned with each finding + instance to help investigators understand the + detected issue. The text must be enclosed in + quotation marks. + recommendation (str): + An explanation of the recommended steps that security teams + can take to resolve the detected issue. This explanation is + returned with each finding generated by this module in the + ``nextSteps`` property of the finding JSON. + """ + class Severity(proto.Enum): + r"""Defines the valid value options for the severity of a + finding. + + Values: + SEVERITY_UNSPECIFIED (0): + Unspecified severity. + CRITICAL (1): + Critical severity. + HIGH (2): + High severity. + MEDIUM (3): + Medium severity. + LOW (4): + Low severity. + """ + SEVERITY_UNSPECIFIED = 0 + CRITICAL = 1 + HIGH = 2 + MEDIUM = 3 + LOW = 4 + + class CustomOutputSpec(proto.Message): + r"""A set of optional name-value pairs that define custom source + properties to return with each finding that is generated by the + custom module. The custom source properties that are defined here + are included in the finding JSON under ``sourceProperties``. + + Attributes: + properties (MutableSequence[google.cloud.securitycenter_v1.types.CustomConfig.CustomOutputSpec.Property]): + A list of custom output properties to add to + the finding. + """ + + class Property(proto.Message): + r"""An individual name-value pair that defines a custom source + property. + + Attributes: + name (str): + Name of the property for the custom output. + value_expression (google.type.expr_pb2.Expr): + The CEL expression for the custom output. A + resource property can be specified to return the + value of the property or a text string enclosed + in quotation marks. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + value_expression: expr_pb2.Expr = proto.Field( + proto.MESSAGE, + number=2, + message=expr_pb2.Expr, + ) + + properties: MutableSequence['CustomConfig.CustomOutputSpec.Property'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='CustomConfig.CustomOutputSpec.Property', + ) + + class ResourceSelector(proto.Message): + r"""Resource for selecting resource type. + + Attributes: + resource_types (MutableSequence[str]): + The resource types to run the detector on. + """ + + resource_types: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + + predicate: expr_pb2.Expr = proto.Field( + proto.MESSAGE, + number=1, + message=expr_pb2.Expr, + ) + custom_output: CustomOutputSpec = proto.Field( + proto.MESSAGE, + number=2, + message=CustomOutputSpec, + ) + resource_selector: ResourceSelector = proto.Field( + proto.MESSAGE, + number=3, + message=ResourceSelector, + ) + severity: Severity = proto.Field( + proto.ENUM, + number=4, + enum=Severity, + ) + description: str = proto.Field( + proto.STRING, + number=5, + ) + recommendation: str = proto.Field( + proto.STRING, + number=6, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py new file mode 100644 index 00000000..57bb086f --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py @@ -0,0 +1,137 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'SecurityHealthAnalyticsCustomModule', + }, +) + + +class SecurityHealthAnalyticsCustomModule(proto.Message): + r"""Represents an instance of a Security Health Analytics custom + module, including its full module name, display name, enablement + state, and last updated time. You can create a custom module at + the organization, folder, or project level. Custom modules that + you create at the organization or folder level are inherited by + the child folders and projects. + + Attributes: + name (str): + Immutable. The resource name of the custom + module. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + The id {customModule} is server-generated and is + not user settable. It will be a numeric id + containing 1-20 digits. + display_name (str): + The display name of the Security Health + Analytics custom module. This display name + becomes the finding category for all findings + that are returned by this custom module. The + display name must be between 1 and 128 + characters, start with a lowercase letter, and + contain alphanumeric characters or underscores + only. + enablement_state (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule.EnablementState): + The enablement state of the custom module. + update_time (google.protobuf.timestamp_pb2.Timestamp): + Output only. The time at which the custom + module was last updated. + last_editor (str): + Output only. The editor that last updated the + custom module. + ancestor_module (str): + Output only. If empty, indicates that the custom module was + created in the organization, folder, or project in which you + are viewing the custom module. Otherwise, + ``ancestor_module`` specifies the organization or folder + from which the custom module is inherited. + custom_config (google.cloud.securitycenter_v1.types.CustomConfig): + The user specified custom configuration for + the module. + """ + class EnablementState(proto.Enum): + r"""Possible enablement states of a custom module. + + Values: + ENABLEMENT_STATE_UNSPECIFIED (0): + Unspecified enablement state. + ENABLED (1): + The module is enabled at the given CRM + resource. + DISABLED (2): + The module is disabled at the given CRM + resource. + INHERITED (3): + State is inherited from an ancestor module. + The module will either be effectively ENABLED or + DISABLED based on its closest non-inherited + ancestor module in the CRM hierarchy. + """ + ENABLEMENT_STATE_UNSPECIFIED = 0 + ENABLED = 1 + DISABLED = 2 + INHERITED = 3 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + enablement_state: EnablementState = proto.Field( + proto.ENUM, + number=4, + enum=EnablementState, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + last_editor: str = proto.Field( + proto.STRING, + number=6, + ) + ancestor_module: str = proto.Field( + proto.STRING, + number=7, + ) + custom_config: security_health_analytics_custom_config.CustomConfig = proto.Field( + proto.MESSAGE, + number=8, + message=security_health_analytics_custom_config.CustomConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py new file mode 100644 index 00000000..4c099a33 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py @@ -0,0 +1,80 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'SecurityMarks', + }, +) + + +class SecurityMarks(proto.Message): + r"""User specified security marks that are attached to the parent + Security Command Center resource. Security marks are scoped + within a Security Command Center organization -- they can be + modified and viewed by all users who have proper permissions on + the organization. + + Attributes: + name (str): + The relative resource name of the SecurityMarks. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Examples: + "organizations/{organization_id}/assets/{asset_id}/securityMarks" + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". + marks (MutableMapping[str, str]): + Mutable user specified security marks belonging to the + parent resource. Constraints are as follows: + + - Keys and values are treated as case insensitive + - Keys must be between 1 - 256 characters (inclusive) + - Keys must be letters, numbers, underscores, or dashes + - Values have leading and trailing whitespace trimmed, + remaining characters must be between 1 - 4096 characters + (inclusive) + canonical_name (str): + The canonical name of the marks. Examples: + "organizations/{organization_id}/assets/{asset_id}/securityMarks" + "folders/{folder_id}/assets/{asset_id}/securityMarks" + "projects/{project_number}/assets/{asset_id}/securityMarks" + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" + "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + marks: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=2, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=3, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py new file mode 100644 index 00000000..03153786 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py @@ -0,0 +1,2456 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1.types import asset as gcs_asset +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import folder +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'BulkMuteFindingsRequest', + 'BulkMuteFindingsResponse', + 'CreateFindingRequest', + 'CreateMuteConfigRequest', + 'CreateNotificationConfigRequest', + 'CreateSecurityHealthAnalyticsCustomModuleRequest', + 'CreateSourceRequest', + 'DeleteMuteConfigRequest', + 'DeleteNotificationConfigRequest', + 'DeleteSecurityHealthAnalyticsCustomModuleRequest', + 'GetBigQueryExportRequest', + 'GetMuteConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', + 'GetSecurityHealthAnalyticsCustomModuleRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', + 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', + 'ListMuteConfigsRequest', + 'ListMuteConfigsResponse', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', + 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', + 'ListSecurityHealthAnalyticsCustomModulesRequest', + 'ListSecurityHealthAnalyticsCustomModulesResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'SetFindingStateRequest', + 'SetMuteRequest', + 'RunAssetDiscoveryRequest', + 'UpdateExternalSystemRequest', + 'UpdateFindingRequest', + 'UpdateMuteConfigRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityHealthAnalyticsCustomModuleRequest', + 'UpdateSourceRequest', + 'UpdateSecurityMarksRequest', + 'CreateBigQueryExportRequest', + 'UpdateBigQueryExportRequest', + 'ListBigQueryExportsRequest', + 'ListBigQueryExportsResponse', + 'DeleteBigQueryExportRequest', + }, +) + + +class BulkMuteFindingsRequest(proto.Message): + r"""Request message for bulk findings update. + Note: + 1. If multiple bulk update requests match the same resource, the + order in which they get executed is not defined. + 2. Once a bulk operation is started, there is no way to stop it. + + Attributes: + parent (str): + Required. The parent, at which bulk action needs to be + applied. Its format is "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + filter (str): + Expression that identifies findings that should be updated. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the + corresponding resource. + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + mute_annotation (str): + This can be a mute configuration name or any + identifier for mute/unmute of findings based on + the filter. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + mute_annotation: str = proto.Field( + proto.STRING, + number=3, + ) + + +class BulkMuteFindingsResponse(proto.Message): + r"""The response to a BulkMute request. Contains the LRO + information. + + """ + + +class CreateFindingRequest(proto.Message): + r"""Request message for creating a finding. + + Attributes: + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + finding_id (str): + Required. Unique identifier provided by the + client within the parent scope. It must be + alphanumeric and less than or equal to 32 + characters and greater than 0 characters in + length. + finding (google.cloud.securitycenter_v1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output only + fields on this resource. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + finding_id: str = proto.Field( + proto.STRING, + number=2, + ) + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_finding.Finding, + ) + + +class CreateMuteConfigRequest(proto.Message): + r"""Request message for creating a mute config. + + Attributes: + parent (str): + Required. Resource name of the new mute configs's parent. + Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + mute_config (google.cloud.securitycenter_v1.types.MuteConfig): + Required. The mute config being created. + mute_config_id (str): + Required. Unique identifier provided by the + client within the parent scope. It must consist + of lower case letters, numbers, and hyphen, with + the first character a letter, the last a letter + or a number, and a 63 character maximum. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + mute_config: gcs_mute_config.MuteConfig = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_mute_config.MuteConfig, + ) + mute_config_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class CreateNotificationConfigRequest(proto.Message): + r"""Request message for creating a notification config. + + Attributes: + parent (str): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + config_id (str): + Required. + Unique identifier provided by the client within + the parent scope. It must be between 1 and 128 + characters and contain alphanumeric characters, + underscores, or hyphens only. + notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): + Required. The notification config being + created. The name and the service account will + be ignored as they are both output only fields + on this resource. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + config_id: str = proto.Field( + proto.STRING, + number=2, + ) + notification_config: gcs_notification_config.NotificationConfig = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_notification_config.NotificationConfig, + ) + + +class CreateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for creating security health analytics custom + modules. + + Attributes: + parent (str): + Required. Resource name of the new custom + module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics custom + module to create. The provided name is ignored + and reset with provided parent information and + server-generated ID. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + + +class CreateSourceRequest(proto.Message): + r"""Request message for creating a source. + + Attributes: + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + source (google.cloud.securitycenter_v1.types.Source): + Required. The Source being created, only the display_name + and description will be used. All other fields will be + ignored. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_source.Source, + ) + + +class DeleteMuteConfigRequest(proto.Message): + r"""Request message for deleting a mute config. + + Attributes: + name (str): + Required. Name of the mute config to delete. Its format is + organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class DeleteNotificationConfigRequest(proto.Message): + r"""Request message for deleting a notification config. + + Attributes: + name (str): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", or + "projects/[project_id]/notificationConfigs/[config_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class DeleteSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for deleting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to + delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetBigQueryExportRequest(proto.Message): + r"""Request message for retrieving a BigQuery export. + + Attributes: + name (str): + Required. Name of the BigQuery export to retrieve. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetMuteConfigRequest(proto.Message): + r"""Request message for retrieving a mute config. + + Attributes: + name (str): + Required. Name of the mute config to retrieve. Its format is + organizations/{organization}/muteConfigs/{config_id}, + folders/{folder}/muteConfigs/{config_id}, or + projects/{project}/muteConfigs/{config_id} + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetNotificationConfigRequest(proto.Message): + r"""Request message for getting a notification config. + + Attributes: + name (str): + Required. Name of the notification config to get. Its format + is + "organizations/[organization_id]/notificationConfigs/[config_id]", + "folders/[folder_id]/notificationConfigs/[config_id]", or + "projects/[project_id]/notificationConfigs/[config_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetOrganizationSettingsRequest(proto.Message): + r"""Request message for getting organization settings. + + Attributes: + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting effective security health + analytics custom modules. + + Attributes: + name (str): + Required. Name of the effective custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to get. + Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSourceRequest(proto.Message): + r"""Request message for getting a source. + + Attributes: + name (str): + Required. Relative resource name of the source. Its format + is "organizations/[organization_id]/source/[source_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GroupAssetsRequest(proto.Message): + r"""Request message for grouping by assets. + + Attributes: + parent (str): + Required. The name of the parent to group the assets by. Its + format is "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``update_time = "2019-06-10T16:07:18-07:00"`` + ``update_time = 1560208038000`` + + - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``create_time = "2019-06-10T16:07:18-07:00"`` + ``create_time = 1560208038000`` + + - iam_policy.policy_blob: ``=``, ``:`` + + - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + - security_marks.marks: ``=``, ``:`` + + - security_center_properties.resource_name: ``=``, ``:`` + + - security_center_properties.resource_display_name: ``=``, + ``:`` + + - security_center_properties.resource_type: ``=``, ``:`` + + - security_center_properties.resource_parent: ``=``, ``:`` + + - security_center_properties.resource_parent_display_name: + ``=``, ``:`` + + - security_center_properties.resource_project: ``=``, ``:`` + + - security_center_properties.resource_project_display_name: + ``=``, ``:`` + + - security_center_properties.resource_owners: ``=``, ``:`` + + For example, ``resource_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``resource_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-resource_properties.my_property : ""`` + group_by (str): + Required. Expression that defines what assets fields to use + for grouping. The string value should follow SQL syntax: + comma separated list of fields. For example: + "security_center_properties.resource_project,security_center_properties.project". + + The following fields are supported when compare_duration is + not set: + + - security_center_properties.resource_project + - security_center_properties.resource_project_display_name + - security_center_properties.resource_type + - security_center_properties.resource_parent + - security_center_properties.resource_parent_display_name + + The following fields are supported when compare_duration is + set: + + - security_center_properties.resource_type + - security_center_properties.resource_project_display_name + - security_center_properties.resource_parent_display_name + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the GroupResult's + "state_change" property is updated to indicate whether the + asset was added, removed, or remained present during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state change value is derived based on the presence of + the asset at the two points in time. Intermediate state + changes between the two times don't affect the result. For + example, the results aren't affected if the asset is removed + and re-created again. + + Possible "state_change" values when compare_duration is + specified: + + - "ADDED": indicates that the asset was not present at the + start of compare_duration, but present at reference_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at + reference_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and reference_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all assets present at read_time. + + If this field is set then ``state_change`` must be a + specified field in ``group_by``. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + page_token (str): + The value returned by the last ``GroupAssetsResponse``; + indicates that this is a continuation of a prior + ``GroupAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=4, + message=duration_pb2.Duration, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + page_token: str = proto.Field( + proto.STRING, + number=7, + ) + page_size: int = proto.Field( + proto.INT32, + number=8, + ) + + +class GroupAssetsResponse(proto.Message): + r"""Response message for grouping by assets. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of results matching the + query. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class GroupFindingsRequest(proto.Message): + r"""Request message for grouping by findings. + + Attributes: + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy across + all sources provide a source_id of ``-``. For example: + organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - parent: ``=``, ``:`` + + - resource_name: ``=``, ``:`` + + - state: ``=``, ``:`` + + - category: ``=``, ``:`` + + - external_uri: ``=``, ``:`` + + - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``event_time = "2019-06-10T16:07:18-07:00"`` + ``event_time = 1560208038000`` + + - severity: ``=``, ``:`` + + - workflow_state: ``=``, ``:`` + + - security_marks.marks: ``=``, ``:`` + + - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + For example, ``source_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based + on a property existing: + ``source_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-source_properties.my_property : ""`` + + - resource: + + - resource.name: ``=``, ``:`` + - resource.parent_name: ``=``, ``:`` + - resource.parent_display_name: ``=``, ``:`` + - resource.project_name: ``=``, ``:`` + - resource.project_display_name: ``=``, ``:`` + - resource.type: ``=``, ``:`` + group_by (str): + Required. Expression that defines what assets fields to use + for grouping (including ``state_change``). The string value + should follow SQL syntax: comma separated list of fields. + For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration is + set: + + - state_change + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the GroupResult's + "state_change" attribute is updated to indicate whether the + finding had its state changed, the finding's state remained + unchanged, or if the finding was added during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state_change value is derived based on the presence and + state of the finding at the two points in time. Intermediate + state changes between the two times don't affect the result. + For example, the results aren't affected if the finding is + made inactive and then active again. + + Possible "state_change" values when compare_duration is + specified: + + - "CHANGED": indicates that the finding was present and + matched the given filter at the start of + compare_duration, but changed its state at read_time. + - "UNCHANGED": indicates that the finding was present and + matched the given filter at the start of compare_duration + and did not change state at read_time. + - "ADDED": indicates that the finding did not match the + given filter or was not present at the start of + compare_duration, but was present at read_time. + - "REMOVED": indicates that the finding was present and + matched the filter at the start of compare_duration, but + did not match the filter at read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all findings present at read_time. + + If this field is set then ``state_change`` must be a + specified field in ``group_by``. + page_token (str): + The value returned by the last ``GroupFindingsResponse``; + indicates that this is a continuation of a prior + ``GroupFindings`` call, and that the system should return + the next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + page_token: str = proto.Field( + proto.STRING, + number=7, + ) + page_size: int = proto.Field( + proto.INT32, + number=8, + ) + + +class GroupFindingsResponse(proto.Message): + r"""Response message for group by findings. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of results matching the + query. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class GroupResult(proto.Message): + r"""Result containing the properties and count of a groupBy + request. + + Attributes: + properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Properties matching the groupBy fields in the + request. + count (int): + Total count of resources for the given + properties. + """ + + properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=1, + message=struct_pb2.Value, + ) + count: int = proto.Field( + proto.INT64, + number=2, + ) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing descendant security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list descendant + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing descendant security health + analytics custom modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent and its descendants. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListMuteConfigsRequest(proto.Message): + r"""Request message for listing mute configs at a given scope + e.g. organization, folder or project. + + Attributes: + parent (str): + Required. The parent, which owns the collection of mute + configs. Its format is "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + page_size (int): + The maximum number of configs to return. The + service may return fewer than this value. + If unspecified, at most 10 configs will be + returned. The maximum value is 1000; values + above 1000 will be coerced to 1000. + page_token (str): + A page token, received from a previous ``ListMuteConfigs`` + call. Provide this to retrieve the subsequent page. + + When paginating, all other parameters provided to + ``ListMuteConfigs`` must match the call that provided the + page token. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListMuteConfigsResponse(proto.Message): + r"""Response message for listing mute configs. + + Attributes: + mute_configs (MutableSequence[google.cloud.securitycenter_v1.types.MuteConfig]): + The mute configs from the specified parent. + next_page_token (str): + A token, which can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + """ + + @property + def raw_page(self): + return self + + mute_configs: MutableSequence[gcs_mute_config.MuteConfig] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_mute_config.MuteConfig, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListNotificationConfigsRequest(proto.Message): + r"""Request message for listing notification configs. + + Attributes: + parent (str): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", "folders/[folder_id]", or + "projects/[project_id]". + page_token (str): + The value returned by the last + ``ListNotificationConfigsResponse``; indicates that this is + a continuation of a prior ``ListNotificationConfigs`` call, + and that the system should return the next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_token: str = proto.Field( + proto.STRING, + number=2, + ) + page_size: int = proto.Field( + proto.INT32, + number=3, + ) + + +class ListNotificationConfigsResponse(proto.Message): + r"""Response message for listing notification configs. + + Attributes: + notification_configs (MutableSequence[google.cloud.securitycenter_v1.types.NotificationConfig]): + Notification configs belonging to the + requested parent. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_notification_config.NotificationConfig, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing effective security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list effective + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing effective security health + analytics custom modules. + + Attributes: + effective_security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule]): + Effective custom modules belonging to the + requested parent. + next_page_token (str): + If not empty, indicates that there may be + more effective custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + effective_security_health_analytics_custom_modules: MutableSequence[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing security health analytics custom + modules. + + Attributes: + parent (str): + Required. Name of parent to list custom + modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListSourcesRequest(proto.Message): + r"""Request message for listing sources. + + Attributes: + parent (str): + Required. Resource name of the parent of sources to list. + Its format should be "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + page_token (str): + The value returned by the last ``ListSourcesResponse``; + indicates that this is a continuation of a prior + ``ListSources`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_token: str = proto.Field( + proto.STRING, + number=2, + ) + page_size: int = proto.Field( + proto.INT32, + number=7, + ) + + +class ListSourcesResponse(proto.Message): + r"""Response message for listing sources. + + Attributes: + sources (MutableSequence[google.cloud.securitycenter_v1.types.Source]): + Sources belonging to the requested parent. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListAssetsRequest(proto.Message): + r"""Request message for listing assets. + + Attributes: + parent (str): + Required. The name of the parent resource that contains the + assets. The value that you can specify on parent depends on + the method in which you specify parent. You can specify one + of the following values: "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following are the allowed field and operator + combinations: + + - name: ``=`` + + - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``update_time = "2019-06-10T16:07:18-07:00"`` + ``update_time = 1560208038000`` + + - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``create_time = "2019-06-10T16:07:18-07:00"`` + ``create_time = 1560208038000`` + + - iam_policy.policy_blob: ``=``, ``:`` + + - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + - security_marks.marks: ``=``, ``:`` + + - security_center_properties.resource_name: ``=``, ``:`` + + - security_center_properties.resource_display_name: ``=``, + ``:`` + + - security_center_properties.resource_type: ``=``, ``:`` + + - security_center_properties.resource_parent: ``=``, ``:`` + + - security_center_properties.resource_parent_display_name: + ``=``, ``:`` + + - security_center_properties.resource_project: ``=``, ``:`` + + - security_center_properties.resource_project_display_name: + ``=``, ``:`` + + - security_center_properties.resource_owners: ``=``, ``:`` + + For example, ``resource_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``resource_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-resource_properties.my_property : ""`` + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,resource_properties.a_property". + Redundant space characters in the syntax are insignificant. + "name desc,resource_properties.a_property" and " name desc , + resource_properties.a_property " are equivalent. + + The following fields are supported: name update_time + resource_properties security_marks.marks + security_center_properties.resource_name + security_center_properties.resource_display_name + security_center_properties.resource_parent + security_center_properties.resource_parent_display_name + security_center_properties.resource_project + security_center_properties.resource_project_display_name + security_center_properties.resource_type + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the ListAssetsResult's + "state_change" attribute is updated to indicate whether the + asset was added, removed, or remained present during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state_change value is derived based on the presence of + the asset at the two points in time. Intermediate state + changes between the two times don't affect the result. For + example, the results aren't affected if the asset is removed + and re-created again. + + Possible "state_change" values when compare_duration is + specified: + + - "ADDED": indicates that the asset was not present at the + start of compare_duration, but present at read_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at read_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all assets present at read_time. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + A field mask to specify the ListAssetsResult + fields to be listed in the response. + An empty field mask will list all fields. + page_token (str): + The value returned by the last ``ListAssetsResponse``; + indicates that this is a continuation of a prior + ``ListAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=7, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=8, + ) + page_size: int = proto.Field( + proto.INT32, + number=9, + ) + + +class ListAssetsResponse(proto.Message): + r"""Response message for listing assets. + + Attributes: + list_assets_results (MutableSequence[google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult]): + Assets matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of assets matching the + query. + """ + + class ListAssetsResult(proto.Message): + r"""Result containing the Asset and its State. + + Attributes: + asset (google.cloud.securitycenter_v1.types.Asset): + Asset matching the search request. + state_change (google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult.StateChange): + State change of the asset between the points + in time. + """ + class StateChange(proto.Enum): + r"""The change in state of the asset. + + When querying across two points in time this describes the change + between the two points: ADDED, REMOVED, or ACTIVE. If there was no + compare_duration supplied in the request the state change will be: + UNUSED + + Values: + UNUSED (0): + State change is unused, this is the canonical + default for this enum. + ADDED (1): + Asset was added between the points in time. + REMOVED (2): + Asset was removed between the points in time. + ACTIVE (3): + Asset was present at both point(s) in time. + """ + UNUSED = 0 + ADDED = 1 + REMOVED = 2 + ACTIVE = 3 + + asset: gcs_asset.Asset = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_asset.Asset, + ) + state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( + proto.ENUM, + number=2, + enum='ListAssetsResponse.ListAssetsResult.StateChange', + ) + + @property + def raw_page(self): + return self + + list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=ListAssetsResult, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class ListFindingsRequest(proto.Message): + r"""Request message for listing findings. + + Attributes: + parent (str): + Required. Name of the source the findings belong to. Its + format is + "organizations/[organization_id]/sources/[source_id], + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]". To list across + all sources provide a source_id of ``-``. For example: + organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/- or + projects/{projects_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - parent: ``=``, ``:`` + + - resource_name: ``=``, ``:`` + + - state: ``=``, ``:`` + + - category: ``=``, ``:`` + + - external_uri: ``=``, ``:`` + + - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``event_time = "2019-06-10T16:07:18-07:00"`` + ``event_time = 1560208038000`` + + - severity: ``=``, ``:`` + + - workflow_state: ``=``, ``:`` + + - security_marks.marks: ``=``, ``:`` + + - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + For example, ``source_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based + on a property existing: + ``source_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-source_properties.my_property : ""`` + + - resource: + + - resource.name: ``=``, ``:`` + - resource.parent_name: ``=``, ``:`` + - resource.parent_display_name: ``=``, ``:`` + - resource.project_name: ``=``, ``:`` + - resource.project_display_name: ``=``, ``:`` + - resource.type: ``=``, ``:`` + - resource.folders.resource_folder: ``=``, ``:`` + - resource.display_name: ``=``, ``:`` + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,source_properties.a_property". Redundant + space characters in the syntax are insignificant. "name + desc,source_properties.a_property" and " name desc , + source_properties.a_property " are equivalent. + + The following fields are supported: name parent state + category resource_name event_time source_properties + security_marks.marks + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the ListFindingsResult's + "state_change" attribute is updated to indicate whether the + finding had its state changed, the finding's state remained + unchanged, or if the finding was added in any state during + the compare_duration period of time that precedes the + read_time. This is the time between (read_time - + compare_duration) and read_time. + + The state_change value is derived based on the presence and + state of the finding at the two points in time. Intermediate + state changes between the two times don't affect the result. + For example, the results aren't affected if the finding is + made inactive and then active again. + + Possible "state_change" values when compare_duration is + specified: + + - "CHANGED": indicates that the finding was present and + matched the given filter at the start of + compare_duration, but changed its state at read_time. + - "UNCHANGED": indicates that the finding was present and + matched the given filter at the start of compare_duration + and did not change state at read_time. + - "ADDED": indicates that the finding did not match the + given filter or was not present at the start of + compare_duration, but was present at read_time. + - "REMOVED": indicates that the finding was present and + matched the filter at the start of compare_duration, but + did not match the filter at read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all findings present at read_time. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + A field mask to specify the Finding fields to + be listed in the response. An empty field mask + will list all fields. + page_token (str): + The value returned by the last ``ListFindingsResponse``; + indicates that this is a continuation of a prior + ``ListFindings`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=7, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=8, + ) + page_size: int = proto.Field( + proto.INT32, + number=9, + ) + + +class ListFindingsResponse(proto.Message): + r"""Response message for listing findings. + + Attributes: + list_findings_results (MutableSequence[google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult]): + Findings matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of findings matching the + query. + """ + + class ListFindingsResult(proto.Message): + r"""Result containing the Finding and its StateChange. + + Attributes: + finding (google.cloud.securitycenter_v1.types.Finding): + Finding matching the search request. + state_change (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.StateChange): + State change of the finding between the + points in time. + resource (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.Resource): + Output only. Resource that is associated with + this finding. + """ + class StateChange(proto.Enum): + r"""The change in state of the finding. + + When querying across two points in time this describes the change in + the finding between the two points: CHANGED, UNCHANGED, ADDED, or + REMOVED. Findings can not be deleted, so REMOVED implies that the + finding at timestamp does not match the filter specified, but it did + at timestamp - compare_duration. If there was no compare_duration + supplied in the request the state change will be: UNUSED + + Values: + UNUSED (0): + State change is unused, this is the canonical + default for this enum. + CHANGED (1): + The finding has changed state in some way + between the points in time and existed at both + points. + UNCHANGED (2): + The finding has not changed state between the + points in time and existed at both points. + ADDED (3): + The finding was created between the points in + time. + REMOVED (4): + The finding at timestamp does not match the filter + specified, but it did at timestamp - compare_duration. + """ + UNUSED = 0 + CHANGED = 1 + UNCHANGED = 2 + ADDED = 3 + REMOVED = 4 + + class Resource(proto.Message): + r"""Information related to the Google Cloud resource that is + associated with this finding. + + Attributes: + name (str): + The full resource name of the resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + display_name (str): + The human readable name of the resource. + type_ (str): + The full resource type of the resource. + project_name (str): + The full resource name of project that the + resource belongs to. + project_display_name (str): + The project ID that the resource belongs to. + parent_name (str): + The full resource name of resource's parent. + parent_display_name (str): + The human readable name of resource's parent. + folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): + Contains a Folder message for each folder in + the assets ancestry. The first folder is the + deepest nested folder, and the last folder is + the folder directly under the Organization. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=8, + ) + type_: str = proto.Field( + proto.STRING, + number=6, + ) + project_name: str = proto.Field( + proto.STRING, + number=2, + ) + project_display_name: str = proto.Field( + proto.STRING, + number=3, + ) + parent_name: str = proto.Field( + proto.STRING, + number=4, + ) + parent_display_name: str = proto.Field( + proto.STRING, + number=5, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=7, + message=folder.Folder, + ) + + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( + proto.ENUM, + number=2, + enum='ListFindingsResponse.ListFindingsResult.StateChange', + ) + resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( + proto.MESSAGE, + number=3, + message='ListFindingsResponse.ListFindingsResult.Resource', + ) + + @property + def raw_page(self): + return self + + list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=ListFindingsResult, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class SetFindingStateRequest(proto.Message): + r"""Request message for updating a finding's state. + + Attributes: + name (str): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + state (google.cloud.securitycenter_v1.types.Finding.State): + Required. The desired State of the finding. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the updated state + takes effect. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + state: gcs_finding.Finding.State = proto.Field( + proto.ENUM, + number=2, + enum=gcs_finding.Finding.State, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +class SetMuteRequest(proto.Message): + r"""Request message for updating a finding's mute status. + + Attributes: + name (str): + Required. The `relative resource + name `__ + of the finding. Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", + "projects/{project_id}/sources/{source_id}/findings/{finding_id}". + mute (google.cloud.securitycenter_v1.types.Finding.Mute): + Required. The desired state of the Mute. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + mute: gcs_finding.Finding.Mute = proto.Field( + proto.ENUM, + number=2, + enum=gcs_finding.Finding.Mute, + ) + + +class RunAssetDiscoveryRequest(proto.Message): + r"""Request message for running asset discovery for an + organization. + + Attributes: + parent (str): + Required. Name of the organization to run asset discovery + for. Its format is "organizations/[organization_id]". + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + + +class UpdateExternalSystemRequest(proto.Message): + r"""Request message for updating a ExternalSystem resource. + + Attributes: + external_system (google.cloud.securitycenter_v1.types.ExternalSystem): + Required. The external system resource to + update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + external system resource. + If empty all mutable fields will be updated. + """ + + external_system: gcs_external_system.ExternalSystem = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_external_system.ExternalSystem, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateFindingRequest(proto.Message): + r"""Request message for updating or creating a finding. + + Attributes: + finding (google.cloud.securitycenter_v1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the name + must be alphanumeric and less than or equal to 32 characters + and greater than 0 characters in length. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the finding resource. + This field should not be specified when creating a finding. + + When updating a finding, an empty mask is treated as + updating all mutable fields and replacing source_properties. + Individual source_properties can be added/updated by using + "source_properties." in the field mask. + """ + + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateMuteConfigRequest(proto.Message): + r"""Request message for updating a mute config. + + Attributes: + mute_config (google.cloud.securitycenter_v1.types.MuteConfig): + Required. The mute config being updated. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to be updated. + If empty all mutable fields will be updated. + """ + + mute_config: gcs_mute_config.MuteConfig = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_mute_config.MuteConfig, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateNotificationConfigRequest(proto.Message): + r"""Request message for updating a notification config. + + Attributes: + notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): + Required. The notification config to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + notification config. + If empty all mutable fields will be updated. + """ + + notification_config: gcs_notification_config.NotificationConfig = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_notification_config.NotificationConfig, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateOrganizationSettingsRequest(proto.Message): + r"""Request message for updating an organization's settings. + + Attributes: + organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): + Required. The organization settings resource + to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + settings resource. + If empty all mutable fields will be updated. + """ + + organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_organization_settings.OrganizationSettings, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for updating security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics custom + module to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + """ + + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSourceRequest(proto.Message): + r"""Request message for updating a source. + + Attributes: + source (google.cloud.securitycenter_v1.types.Source): + Required. The source resource to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the source + resource. + If empty all mutable fields will be updated. + """ + + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSecurityMarksRequest(proto.Message): + r"""Request message for updating a SecurityMarks resource. + + Attributes: + security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): + Required. The security marks resource to + update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the security marks + resource. + + The field mask must not contain duplicate fields. If empty + or set to "marks", all marks will be replaced. Individual + marks can be updated using "marks.". + start_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the updated SecurityMarks + take effect. If not set uses current server + time. Updates will be applied to the + SecurityMarks that are active immediately + preceding this time. Must be earlier or equal to + the server time. + """ + + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_marks.SecurityMarks, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +class CreateBigQueryExportRequest(proto.Message): + r"""Request message for creating a BigQuery export. + + Attributes: + parent (str): + Required. The name of the parent resource of the new + BigQuery export. Its format is + "organizations/[organization_id]", "folders/[folder_id]", or + "projects/[project_id]". + big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): + Required. The BigQuery export being created. + big_query_export_id (str): + Required. Unique identifier provided by the + client within the parent scope. It must consist + of lower case letters, numbers, and hyphen, with + the first character a letter, the last a letter + or a number, and a 63 character maximum. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + big_query_export: bigquery_export.BigQueryExport = proto.Field( + proto.MESSAGE, + number=2, + message=bigquery_export.BigQueryExport, + ) + big_query_export_id: str = proto.Field( + proto.STRING, + number=3, + ) + + +class UpdateBigQueryExportRequest(proto.Message): + r"""Request message for updating a BigQuery export. + + Attributes: + big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): + Required. The BigQuery export being updated. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to be updated. + If empty all mutable fields will be updated. + """ + + big_query_export: bigquery_export.BigQueryExport = proto.Field( + proto.MESSAGE, + number=1, + message=bigquery_export.BigQueryExport, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class ListBigQueryExportsRequest(proto.Message): + r"""Request message for listing BigQuery exports at a given scope + e.g. organization, folder or project. + + Attributes: + parent (str): + Required. The parent, which owns the collection of BigQuery + exports. Its format is "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + page_size (int): + The maximum number of configs to return. The + service may return fewer than this value. + If unspecified, at most 10 configs will be + returned. The maximum value is 1000; values + above 1000 will be coerced to 1000. + page_token (str): + A page token, received from a previous + ``ListBigQueryExports`` call. Provide this to retrieve the + subsequent page. When paginating, all other parameters + provided to ``ListBigQueryExports`` must match the call that + provided the page token. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListBigQueryExportsResponse(proto.Message): + r"""Response message for listing BigQuery exports. + + Attributes: + big_query_exports (MutableSequence[google.cloud.securitycenter_v1.types.BigQueryExport]): + The BigQuery exports from the specified + parent. + next_page_token (str): + A token, which can be sent as ``page_token`` to retrieve the + next page. If this field is omitted, there are no subsequent + pages. + """ + + @property + def raw_page(self): + return self + + big_query_exports: MutableSequence[bigquery_export.BigQueryExport] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=bigquery_export.BigQueryExport, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class DeleteBigQueryExportRequest(proto.Message): + r"""Request message for deleting a BigQuery export. + + Attributes: + name (str): + Required. The name of the BigQuery export to delete. Its + format is + organizations/{organization}/bigQueryExports/{export_id}, + folders/{folder}/bigQueryExports/{export_id}, or + projects/{project}/bigQueryExports/{export_id} + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py new file mode 100644 index 00000000..3694ecf0 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py @@ -0,0 +1,87 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Source', + }, +) + + +class Source(proto.Message): + r"""Security Command Center finding source. A finding source + is an entity or a mechanism that can produce a finding. A source + is like a container of findings that come from the same scanner, + logger, monitor, and other tools. + + Attributes: + name (str): + The relative resource name of this source. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}". + display_name (str): + The source's display name. + A source's display name must be unique amongst + its siblings, for example, two sources with the + same parent can't share the same display name. + The display name must have a length between 1 + and 64 characters (inclusive). + description (str): + The description of the source (max of 1024 + characters). Example: + "Web Security Scanner is a web security scanner + for common vulnerabilities in App Engine + applications. It can automatically scan and + detect four common vulnerabilities, including + cross-site-scripting (XSS), Flash injection, + mixed content (HTTP in HTTPS), and outdated or + insecure libraries.". + canonical_name (str): + The canonical name of the finding. It's either + "organizations/{organization_id}/sources/{source_id}", + "folders/{folder_id}/sources/{source_id}" or + "projects/{project_number}/sources/{source_id}", depending + on the closest CRM ancestor of the resource associated with + the finding. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + description: str = proto.Field( + proto.STRING, + number=3, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=14, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py new file mode 100644 index 00000000..5fcbfab9 --- /dev/null +++ b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py @@ -0,0 +1,353 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1', + manifest={ + 'Vulnerability', + 'Cve', + 'Reference', + 'Cvssv3', + }, +) + + +class Vulnerability(proto.Message): + r"""Refers to common vulnerability fields e.g. cve, cvss, cwe + etc. + + Attributes: + cve (google.cloud.securitycenter_v1.types.Cve): + CVE stands for Common Vulnerabilities and + Exposures (https://cve.mitre.org/about/) + """ + + cve: 'Cve' = proto.Field( + proto.MESSAGE, + number=1, + message='Cve', + ) + + +class Cve(proto.Message): + r"""CVE stands for Common Vulnerabilities and Exposures. + More information: https://cve.mitre.org + + Attributes: + id (str): + The unique identifier for the vulnerability. + e.g. CVE-2021-34527 + references (MutableSequence[google.cloud.securitycenter_v1.types.Reference]): + Additional information about the CVE. + e.g. + https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527 + cvssv3 (google.cloud.securitycenter_v1.types.Cvssv3): + Describe Common Vulnerability Scoring System + specified at + https://www.first.org/cvss/v3.1/specification-document + upstream_fix_available (bool): + Whether upstream fix is available for the + CVE. + """ + + id: str = proto.Field( + proto.STRING, + number=1, + ) + references: MutableSequence['Reference'] = proto.RepeatedField( + proto.MESSAGE, + number=2, + message='Reference', + ) + cvssv3: 'Cvssv3' = proto.Field( + proto.MESSAGE, + number=3, + message='Cvssv3', + ) + upstream_fix_available: bool = proto.Field( + proto.BOOL, + number=4, + ) + + +class Reference(proto.Message): + r"""Additional Links + + Attributes: + source (str): + Source of the reference e.g. NVD + uri (str): + Uri for the mentioned source e.g. + https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527. + """ + + source: str = proto.Field( + proto.STRING, + number=1, + ) + uri: str = proto.Field( + proto.STRING, + number=2, + ) + + +class Cvssv3(proto.Message): + r"""Common Vulnerability Scoring System version 3. + + Attributes: + base_score (float): + The base score is a function of the base + metric scores. + attack_vector (google.cloud.securitycenter_v1.types.Cvssv3.AttackVector): + Base Metrics + Represents the intrinsic characteristics of a + vulnerability that are constant over time and + across user environments. This metric reflects + the context by which vulnerability exploitation + is possible. + attack_complexity (google.cloud.securitycenter_v1.types.Cvssv3.AttackComplexity): + This metric describes the conditions beyond + the attacker's control that must exist in order + to exploit the vulnerability. + privileges_required (google.cloud.securitycenter_v1.types.Cvssv3.PrivilegesRequired): + This metric describes the level of privileges + an attacker must possess before successfully + exploiting the vulnerability. + user_interaction (google.cloud.securitycenter_v1.types.Cvssv3.UserInteraction): + This metric captures the requirement for a + human user, other than the attacker, to + participate in the successful compromise of the + vulnerable component. + scope (google.cloud.securitycenter_v1.types.Cvssv3.Scope): + The Scope metric captures whether a + vulnerability in one vulnerable component + impacts resources in components beyond its + security scope. + confidentiality_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): + This metric measures the impact to the + confidentiality of the information resources + managed by a software component due to a + successfully exploited vulnerability. + integrity_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): + This metric measures the impact to integrity + of a successfully exploited vulnerability. + availability_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): + This metric measures the impact to the + availability of the impacted component resulting + from a successfully exploited vulnerability. + """ + class AttackVector(proto.Enum): + r"""This metric reflects the context by which vulnerability + exploitation is possible. + + Values: + ATTACK_VECTOR_UNSPECIFIED (0): + Invalid value. + ATTACK_VECTOR_NETWORK (1): + The vulnerable component is bound to the + network stack and the set of possible attackers + extends beyond the other options listed below, + up to and including the entire Internet. + ATTACK_VECTOR_ADJACENT (2): + The vulnerable component is bound to the + network stack, but the attack is limited at the + protocol level to a logically adjacent topology. + ATTACK_VECTOR_LOCAL (3): + The vulnerable component is not bound to the + network stack and the attacker's path is via + read/write/execute capabilities. + ATTACK_VECTOR_PHYSICAL (4): + The attack requires the attacker to + physically touch or manipulate the vulnerable + component. + """ + ATTACK_VECTOR_UNSPECIFIED = 0 + ATTACK_VECTOR_NETWORK = 1 + ATTACK_VECTOR_ADJACENT = 2 + ATTACK_VECTOR_LOCAL = 3 + ATTACK_VECTOR_PHYSICAL = 4 + + class AttackComplexity(proto.Enum): + r"""This metric describes the conditions beyond the attacker's + control that must exist in order to exploit the vulnerability. + + Values: + ATTACK_COMPLEXITY_UNSPECIFIED (0): + Invalid value. + ATTACK_COMPLEXITY_LOW (1): + Specialized access conditions or extenuating + circumstances do not exist. An attacker can + expect repeatable success when attacking the + vulnerable component. + ATTACK_COMPLEXITY_HIGH (2): + A successful attack depends on conditions + beyond the attacker's control. That is, a + successful attack cannot be accomplished at + will, but requires the attacker to invest in + some measurable amount of effort in preparation + or execution against the vulnerable component + before a successful attack can be expected. + """ + ATTACK_COMPLEXITY_UNSPECIFIED = 0 + ATTACK_COMPLEXITY_LOW = 1 + ATTACK_COMPLEXITY_HIGH = 2 + + class PrivilegesRequired(proto.Enum): + r"""This metric describes the level of privileges an attacker + must possess before successfully exploiting the vulnerability. + + Values: + PRIVILEGES_REQUIRED_UNSPECIFIED (0): + Invalid value. + PRIVILEGES_REQUIRED_NONE (1): + The attacker is unauthorized prior to attack, + and therefore does not require any access to + settings or files of the vulnerable system to + carry out an attack. + PRIVILEGES_REQUIRED_LOW (2): + The attacker requires privileges that provide + basic user capabilities that could normally + affect only settings and files owned by a user. + Alternatively, an attacker with Low privileges + has the ability to access only non-sensitive + resources. + PRIVILEGES_REQUIRED_HIGH (3): + The attacker requires privileges that provide + significant (e.g., administrative) control over + the vulnerable component allowing access to + component-wide settings and files. + """ + PRIVILEGES_REQUIRED_UNSPECIFIED = 0 + PRIVILEGES_REQUIRED_NONE = 1 + PRIVILEGES_REQUIRED_LOW = 2 + PRIVILEGES_REQUIRED_HIGH = 3 + + class UserInteraction(proto.Enum): + r"""This metric captures the requirement for a human user, other + than the attacker, to participate in the successful compromise + of the vulnerable component. + + Values: + USER_INTERACTION_UNSPECIFIED (0): + Invalid value. + USER_INTERACTION_NONE (1): + The vulnerable system can be exploited + without interaction from any user. + USER_INTERACTION_REQUIRED (2): + Successful exploitation of this vulnerability + requires a user to take some action before the + vulnerability can be exploited. + """ + USER_INTERACTION_UNSPECIFIED = 0 + USER_INTERACTION_NONE = 1 + USER_INTERACTION_REQUIRED = 2 + + class Scope(proto.Enum): + r"""The Scope metric captures whether a vulnerability in one + vulnerable component impacts resources in components beyond its + security scope. + + Values: + SCOPE_UNSPECIFIED (0): + Invalid value. + SCOPE_UNCHANGED (1): + An exploited vulnerability can only affect + resources managed by the same security + authority. + SCOPE_CHANGED (2): + An exploited vulnerability can affect + resources beyond the security scope managed by + the security authority of the vulnerable + component. + """ + SCOPE_UNSPECIFIED = 0 + SCOPE_UNCHANGED = 1 + SCOPE_CHANGED = 2 + + class Impact(proto.Enum): + r"""The Impact metrics capture the effects of a successfully + exploited vulnerability on the component that suffers the worst + outcome that is most directly and predictably associated with + the attack. + + Values: + IMPACT_UNSPECIFIED (0): + Invalid value. + IMPACT_HIGH (1): + High impact. + IMPACT_LOW (2): + Low impact. + IMPACT_NONE (3): + No impact. + """ + IMPACT_UNSPECIFIED = 0 + IMPACT_HIGH = 1 + IMPACT_LOW = 2 + IMPACT_NONE = 3 + + base_score: float = proto.Field( + proto.DOUBLE, + number=1, + ) + attack_vector: AttackVector = proto.Field( + proto.ENUM, + number=5, + enum=AttackVector, + ) + attack_complexity: AttackComplexity = proto.Field( + proto.ENUM, + number=6, + enum=AttackComplexity, + ) + privileges_required: PrivilegesRequired = proto.Field( + proto.ENUM, + number=7, + enum=PrivilegesRequired, + ) + user_interaction: UserInteraction = proto.Field( + proto.ENUM, + number=8, + enum=UserInteraction, + ) + scope: Scope = proto.Field( + proto.ENUM, + number=9, + enum=Scope, + ) + confidentiality_impact: Impact = proto.Field( + proto.ENUM, + number=10, + enum=Impact, + ) + integrity_impact: Impact = proto.Field( + proto.ENUM, + number=11, + enum=Impact, + ) + availability_impact: Impact = proto.Field( + proto.ENUM, + number=12, + enum=Impact, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/mypy.ini b/owl-bot-staging/v1/mypy.ini new file mode 100644 index 00000000..574c5aed --- /dev/null +++ b/owl-bot-staging/v1/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +python_version = 3.7 +namespace_packages = True diff --git a/owl-bot-staging/v1/noxfile.py b/owl-bot-staging/v1/noxfile.py new file mode 100644 index 00000000..5aa9e2cb --- /dev/null +++ b/owl-bot-staging/v1/noxfile.py @@ -0,0 +1,184 @@ +# -*- 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 os +import pathlib +import shutil +import subprocess +import sys + + +import nox # type: ignore + +ALL_PYTHON = [ + "3.7", + "3.8", + "3.9", + "3.10", + "3.11", +] + +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + +LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" +PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") + +BLACK_VERSION = "black==22.3.0" +BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] +DEFAULT_PYTHON_VERSION = "3.11" + +nox.sessions = [ + "unit", + "cover", + "mypy", + "check_lower_bounds" + # exclude update_lower_bounds from default + "docs", + "blacken", + "lint", + "lint_setup_py", +] + +@nox.session(python=ALL_PYTHON) +def unit(session): + """Run the unit test suite.""" + + session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') + session.install('-e', '.') + + session.run( + 'py.test', + '--quiet', + '--cov=google/cloud/securitycenter_v1/', + '--cov=tests/', + '--cov-config=.coveragerc', + '--cov-report=term', + '--cov-report=html', + os.path.join('tests', 'unit', ''.join(session.posargs)) + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def cover(session): + """Run the final coverage report. + This outputs the coverage report aggregating coverage from the unit + test runs (not system test runs), and then erases coverage data. + """ + session.install("coverage", "pytest-cov") + session.run("coverage", "report", "--show-missing", "--fail-under=100") + + session.run("coverage", "erase") + + +@nox.session(python=ALL_PYTHON) +def mypy(session): + """Run the type checker.""" + session.install( + 'mypy', + 'types-requests', + 'types-protobuf' + ) + session.install('.') + session.run( + 'mypy', + '--explicit-package-bases', + 'google', + ) + + +@nox.session +def update_lower_bounds(session): + """Update lower bounds in constraints.txt to match setup.py""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'update', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + + +@nox.session +def check_lower_bounds(session): + """Check lower bounds in setup.py are reflected in constraints file""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'check', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def docs(session): + """Build the docs for this library.""" + + session.install("-e", ".") + session.install("sphinx==4.0.1", "alabaster", "recommonmark") + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-W", # warnings as errors + "-T", # show full traceback on exception + "-N", # no colors + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint(session): + """Run linters. + + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. + """ + session.install("flake8", BLACK_VERSION) + session.run( + "black", + "--check", + *BLACK_PATHS, + ) + session.run("flake8", "google", "tests", "samples") + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def blacken(session): + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + session.run( + "black", + *BLACK_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint_setup_py(session): + """Verify that setup.py is valid (including RST check).""" + session.install("docutils", "pygments") + session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py new file mode 100644 index 00000000..9f200964 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for BulkMuteFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_bulk_mute_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.BulkMuteFindingsRequest( + parent="parent_value", + ) + + # Make the request + operation = client.bulk_mute_findings(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py new file mode 100644 index 00000000..4b401c59 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for BulkMuteFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_bulk_mute_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.BulkMuteFindingsRequest( + parent="parent_value", + ) + + # Make the request + operation = client.bulk_mute_findings(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py new file mode 100644 index 00000000..6167e9c2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateBigQueryExportRequest( + parent="parent_value", + big_query_export_id="big_query_export_id_value", + ) + + # Make the request + response = await client.create_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py new file mode 100644 index 00000000..d56e951b --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateBigQueryExportRequest( + parent="parent_value", + big_query_export_id="big_query_export_id_value", + ) + + # Make the request + response = client.create_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py new file mode 100644 index 00000000..23306071 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py new file mode 100644 index 00000000..28a836e5 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py new file mode 100644 index 00000000..464d78cb --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.CreateMuteConfigRequest( + parent="parent_value", + mute_config=mute_config, + mute_config_id="mute_config_id_value", + ) + + # Make the request + response = await client.create_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py new file mode 100644 index 00000000..9b9f6bad --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py @@ -0,0 +1,57 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.CreateMuteConfigRequest( + parent="parent_value", + mute_config=mute_config, + mute_config_id="mute_config_id_value", + ) + + # Make the request + response = client.create_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py new file mode 100644 index 00000000..8df8025a --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = await client.create_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py new file mode 100644 index 00000000..21354ca0 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = client.create_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py new file mode 100644 index 00000000..f35b78c0 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py new file mode 100644 index 00000000..016c1c40 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py new file mode 100644 index 00000000..5ce8609b --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_create_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py new file mode 100644 index 00000000..eeae4934 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_CreateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_create_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py new file mode 100644 index 00000000..7c965f30 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_delete_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteBigQueryExportRequest( + name="name_value", + ) + + # Make the request + await client.delete_big_query_export(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py new file mode 100644 index 00000000..7effded9 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_delete_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteBigQueryExportRequest( + name="name_value", + ) + + # Make the request + client.delete_big_query_export(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py new file mode 100644 index 00000000..52a13bba --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_delete_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteMuteConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_mute_config(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py new file mode 100644 index 00000000..c8970d3b --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_delete_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteMuteConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_mute_config(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py new file mode 100644 index 00000000..1d11af7d --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_notification_config(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py new file mode 100644 index 00000000..0607ed23 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_notification_config(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py new file mode 100644 index 00000000..82a795d9 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + await client.delete_security_health_analytics_custom_module(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py new file mode 100644 index 00000000..69bb5311 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + client.delete_security_health_analytics_custom_module(request=request) + + +# [END securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py new file mode 100644 index 00000000..0e4f204f --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetBigQueryExportRequest( + name="name_value", + ) + + # Make the request + response = await client.get_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py new file mode 100644 index 00000000..f1cdd5cd --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetBigQueryExportRequest( + name="name_value", + ) + + # Make the request + response = client.get_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py new file mode 100644 index 00000000..7c17fef3 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetEffectiveSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_effective_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = await client.get_effective_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py new file mode 100644 index 00000000..81240c52 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetEffectiveSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_effective_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = client.get_effective_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py new file mode 100644 index 00000000..ce96f40e --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py new file mode 100644 index 00000000..54bd97ea --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py new file mode 100644 index 00000000..4bb54d33 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetMuteConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py new file mode 100644 index 00000000..efa2d097 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetMuteConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py new file mode 100644 index 00000000..0d0ae834 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py new file mode 100644 index 00000000..1e9c80a7 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py new file mode 100644 index 00000000..7f9e2924 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py new file mode 100644 index 00000000..cf81626a --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py new file mode 100644 index 00000000..a19f6dec --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = await client.get_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py new file mode 100644 index 00000000..0cbba110 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + response = client.get_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py new file mode 100644 index 00000000..4108d8e2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py new file mode 100644 index 00000000..8f8dffe2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GetSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py new file mode 100644 index 00000000..e445a285 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py new file mode 100644 index 00000000..13d1291e --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py new file mode 100644 index 00000000..9577bd52 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_group_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py new file mode 100644 index 00000000..59b3edff --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_group_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py new file mode 100644 index 00000000..5191db34 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py new file mode 100644 index 00000000..6f2e8d1c --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py new file mode 100644 index 00000000..5a4a7ce1 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListBigQueryExports +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_big_query_exports(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListBigQueryExportsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_big_query_exports(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py new file mode 100644 index 00000000..ffbd3f44 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListBigQueryExports +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_big_query_exports(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListBigQueryExportsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_big_query_exports(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py new file mode 100644 index 00000000..a5f8daca --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListDescendantSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py new file mode 100644 index 00000000..0d3dfa29 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListDescendantSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py new file mode 100644 index 00000000..585382ca --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListEffectiveSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_effective_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py new file mode 100644 index 00000000..0162f609 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListEffectiveSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_effective_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py new file mode 100644 index 00000000..c5fc4e47 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py new file mode 100644 index 00000000..b3489d50 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py new file mode 100644 index 00000000..2071e7b9 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListMuteConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py new file mode 100644 index 00000000..ebf57076 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListMuteConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py new file mode 100644 index 00000000..ebce4273 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListNotificationConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py new file mode 100644 index 00000000..8767d848 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListNotificationConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py new file mode 100644 index 00000000..d3b7b4a7 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py new file mode 100644 index 00000000..b8aaf90e --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSecurityHealthAnalyticsCustomModules +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py new file mode 100644 index 00000000..cc2376f2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListSources_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_list_sources(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py new file mode 100644 index 00000000..ce9cf9e2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_ListSources_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_list_sources(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py new file mode 100644 index 00000000..f46d5c97 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py new file mode 100644 index 00000000..f532edfb --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py new file mode 100644 index 00000000..d6d59805 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py new file mode 100644 index 00000000..9d22cf31 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_set_finding_state(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py new file mode 100644 index 00000000..011f3edc --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py new file mode 100644 index 00000000..7462b76d --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py new file mode 100644 index 00000000..0505bcfb --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetMute +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetMute_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_set_mute(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetMuteRequest( + name="name_value", + mute="UNDEFINED", + ) + + # Make the request + response = await client.set_mute(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetMute_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py new file mode 100644 index 00000000..f3a30dd5 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetMute +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_SetMute_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_set_mute(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.SetMuteRequest( + name="name_value", + mute="UNDEFINED", + ) + + # Make the request + response = client.set_mute(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_SetMute_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py new file mode 100644 index 00000000..d3740be9 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py new file mode 100644 index 00000000..e4d93da8 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py new file mode 100644 index 00000000..bb383531 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateBigQueryExportRequest( + ) + + # Make the request + response = await client.update_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py new file mode 100644 index 00000000..7d0dbf32 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateBigQueryExport +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_big_query_export(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateBigQueryExportRequest( + ) + + # Make the request + response = client.update_big_query_export(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py new file mode 100644 index 00000000..a3fe2681 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateExternalSystem +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_external_system(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateExternalSystemRequest( + ) + + # Make the request + response = await client.update_external_system(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py new file mode 100644 index 00000000..0a4e224f --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateExternalSystem +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_external_system(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateExternalSystemRequest( + ) + + # Make the request + response = client.update_external_system(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py new file mode 100644 index 00000000..d73667f2 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py new file mode 100644 index 00000000..d8cf809f --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_finding(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py new file mode 100644 index 00000000..a3c702a0 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.UpdateMuteConfigRequest( + mute_config=mute_config, + ) + + # Make the request + response = await client.update_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py new file mode 100644 index 00000000..b73b1ad8 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py @@ -0,0 +1,55 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateMuteConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_mute_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + mute_config = securitycenter_v1.MuteConfig() + mute_config.filter = "filter_value" + + request = securitycenter_v1.UpdateMuteConfigRequest( + mute_config=mute_config, + ) + + # Make the request + response = client.update_mute_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py new file mode 100644 index 00000000..da71a0be --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = await client.update_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py new file mode 100644 index 00000000..cef53b79 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_notification_config(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = client.update_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py new file mode 100644 index 00000000..e9b3d66f --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py new file mode 100644 index 00000000..eca45d7b --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py new file mode 100644 index 00000000..3ae5c6ba --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = await client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py new file mode 100644 index 00000000..538d1b1e --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityHealthAnalyticsCustomModule +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py new file mode 100644 index 00000000..81e9554e --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py new file mode 100644 index 00000000..fe2b480c --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_security_marks(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py new file mode 100644 index 00000000..9bc61107 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +async def sample_update_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py new file mode 100644 index 00000000..d65724e9 --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1 + + +def sample_update_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json b/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json new file mode 100644 index 00000000..ec678e1a --- /dev/null +++ b/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json @@ -0,0 +1,7211 @@ +{ + "clientLibrary": { + "apis": [ + { + "id": "google.cloud.securitycenter.v1", + "version": "v1" + } + ], + "language": "PYTHON", + "name": "google-cloud-securitycenter", + "version": "0.1.0" + }, + "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.bulk_mute_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "BulkMuteFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "bulk_mute_findings" + }, + "description": "Sample for BulkMuteFindings", + "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.bulk_mute_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "BulkMuteFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "bulk_mute_findings" + }, + "description": "Sample for BulkMuteFindings", + "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "big_query_export", + "type": "google.cloud.securitycenter_v1.types.BigQueryExport" + }, + { + "name": "big_query_export_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "create_big_query_export" + }, + "description": "Sample for CreateBigQueryExport", + "file": "securitycenter_v1_generated_security_center_create_big_query_export_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_big_query_export_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "big_query_export", + "type": "google.cloud.securitycenter_v1.types.BigQueryExport" + }, + { + "name": "big_query_export_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "create_big_query_export" + }, + "description": "Sample for CreateBigQueryExport", + "file": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1_generated_security_center_create_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1_generated_security_center_create_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "mute_config", + "type": "google.cloud.securitycenter_v1.types.MuteConfig" + }, + { + "name": "mute_config_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "create_mute_config" + }, + "description": "Sample for CreateMuteConfig", + "file": "securitycenter_v1_generated_security_center_create_mute_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_mute_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "mute_config", + "type": "google.cloud.securitycenter_v1.types.MuteConfig" + }, + { + "name": "mute_config_id", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "create_mute_config" + }, + "description": "Sample for CreateMuteConfig", + "file": "securitycenter_v1_generated_security_center_create_mute_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync", + "segments": [ + { + "end": 56, + "start": 27, + "type": "FULL" + }, + { + "end": 56, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 50, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 53, + "start": 51, + "type": "REQUEST_EXECUTION" + }, + { + "end": 57, + "start": 54, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_mute_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "config_id", + "type": "str" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1.types.NotificationConfig" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "create_notification_config" + }, + "description": "Sample for CreateNotificationConfig", + "file": "securitycenter_v1_generated_security_center_create_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "config_id", + "type": "str" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1.types.NotificationConfig" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "create_notification_config" + }, + "description": "Sample for CreateNotificationConfig", + "file": "securitycenter_v1_generated_security_center_create_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1_generated_security_center_create_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1_generated_security_center_create_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_big_query_export" + }, + "description": "Sample for DeleteBigQueryExport", + "file": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_big_query_export" + }, + "description": "Sample for DeleteBigQueryExport", + "file": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_mute_config" + }, + "description": "Sample for DeleteMuteConfig", + "file": "securitycenter_v1_generated_security_center_delete_mute_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_mute_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_mute_config" + }, + "description": "Sample for DeleteMuteConfig", + "file": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_notification_config" + }, + "description": "Sample for DeleteNotificationConfig", + "file": "securitycenter_v1_generated_security_center_delete_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_notification_config" + }, + "description": "Sample for DeleteNotificationConfig", + "file": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_security_health_analytics_custom_module" + }, + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_security_health_analytics_custom_module" + }, + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" + }, + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" + }, + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_effective_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" + }, + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_effective_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" + }, + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" + }, + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" + }, + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" + }, + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" + }, + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListBigQueryExports" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListBigQueryExports" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_descendant_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" + }, + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_descendant_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" + }, + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_effective_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_effective_security_health_analytics_custom_modules" + }, + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_effective_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_effective_security_health_analytics_custom_modules" + }, + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListMuteConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", + "shortName": "list_mute_configs" + }, + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListMuteConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", + "shortName": "list_mute_configs" + }, + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListNotificationConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", + "shortName": "list_notification_configs" + }, + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListNotificationConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", + "shortName": "list_notification_configs" + }, + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_security_health_analytics_custom_modules" + }, + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_security_health_analytics_custom_modules" + }, + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1_generated_security_center_list_sources_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_sources_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1_generated_security_center_list_sources_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_sources_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1_generated_security_center_set_finding_state_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_finding_state_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1_generated_security_center_set_finding_state_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_finding_state_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1_generated_security_center_set_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_mute", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetMute" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "mute", + "type": "google.cloud.securitycenter_v1.types.Finding.Mute" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "set_mute" + }, + "description": "Sample for SetMute", + "file": "securitycenter_v1_generated_security_center_set_mute_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_mute_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_mute", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetMute" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "mute", + "type": "google.cloud.securitycenter_v1.types.Finding.Mute" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "set_mute" + }, + "description": "Sample for SetMute", + "file": "securitycenter_v1_generated_security_center_set_mute_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_set_mute_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" + }, + { + "name": "big_query_export", + "type": "google.cloud.securitycenter_v1.types.BigQueryExport" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "update_big_query_export" + }, + "description": "Sample for UpdateBigQueryExport", + "file": "securitycenter_v1_generated_security_center_update_big_query_export_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_big_query_export_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_big_query_export", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateBigQueryExport" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" + }, + { + "name": "big_query_export", + "type": "google.cloud.securitycenter_v1.types.BigQueryExport" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "update_big_query_export" + }, + "description": "Sample for UpdateBigQueryExport", + "file": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_external_system", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateExternalSystem" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" + }, + { + "name": "external_system", + "type": "google.cloud.securitycenter_v1.types.ExternalSystem" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", + "shortName": "update_external_system" + }, + "description": "Sample for UpdateExternalSystem", + "file": "securitycenter_v1_generated_security_center_update_external_system_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_external_system_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_external_system", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateExternalSystem" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" + }, + { + "name": "external_system", + "type": "google.cloud.securitycenter_v1.types.ExternalSystem" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", + "shortName": "update_external_system" + }, + "description": "Sample for UpdateExternalSystem", + "file": "securitycenter_v1_generated_security_center_update_external_system_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_external_system_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1_generated_security_center_update_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1_generated_security_center_update_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" + }, + { + "name": "mute_config", + "type": "google.cloud.securitycenter_v1.types.MuteConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "update_mute_config" + }, + "description": "Sample for UpdateMuteConfig", + "file": "securitycenter_v1_generated_security_center_update_mute_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_mute_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_mute_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateMuteConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" + }, + { + "name": "mute_config", + "type": "google.cloud.securitycenter_v1.types.MuteConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "update_mute_config" + }, + "description": "Sample for UpdateMuteConfig", + "file": "securitycenter_v1_generated_security_center_update_mute_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync", + "segments": [ + { + "end": 54, + "start": 27, + "type": "FULL" + }, + { + "end": 54, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 48, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 51, + "start": 49, + "type": "REQUEST_EXECUTION" + }, + { + "end": 55, + "start": 52, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_mute_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1.types.NotificationConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "update_notification_config" + }, + "description": "Sample for UpdateNotificationConfig", + "file": "securitycenter_v1_generated_security_center_update_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1.types.NotificationConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "update_notification_config" + }, + "description": "Sample for UpdateNotificationConfig", + "file": "securitycenter_v1_generated_security_center_update_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_update_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1.types.SecurityMarks" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1_generated_security_center_update_security_marks_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_marks_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1.types.SecurityMarks" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1_generated_security_center_update_security_marks_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_marks_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1_generated_security_center_update_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1_generated_security_center_update_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_source_sync.py" + } + ] +} diff --git a/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py b/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py new file mode 100644 index 00000000..af2d084d --- /dev/null +++ b/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py @@ -0,0 +1,219 @@ +#! /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 securitycenterCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'bulk_mute_findings': ('parent', 'filter', 'mute_annotation', ), + 'create_big_query_export': ('parent', 'big_query_export', 'big_query_export_id', ), + 'create_finding': ('parent', 'finding_id', 'finding', ), + 'create_mute_config': ('parent', 'mute_config', 'mute_config_id', ), + 'create_notification_config': ('parent', 'config_id', 'notification_config', ), + 'create_security_health_analytics_custom_module': ('parent', 'security_health_analytics_custom_module', ), + 'create_source': ('parent', 'source', ), + 'delete_big_query_export': ('name', ), + 'delete_mute_config': ('name', ), + 'delete_notification_config': ('name', ), + 'delete_security_health_analytics_custom_module': ('name', ), + 'get_big_query_export': ('name', ), + 'get_effective_security_health_analytics_custom_module': ('name', ), + 'get_iam_policy': ('resource', 'options', ), + 'get_mute_config': ('name', ), + 'get_notification_config': ('name', ), + 'get_organization_settings': ('name', ), + 'get_security_health_analytics_custom_module': ('name', ), + 'get_source': ('name', ), + 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), + 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), + 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), + 'list_big_query_exports': ('parent', 'page_size', 'page_token', ), + 'list_descendant_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), + 'list_effective_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), + 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), + 'list_mute_configs': ('parent', 'page_size', 'page_token', ), + 'list_notification_configs': ('parent', 'page_token', 'page_size', ), + 'list_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), + 'list_sources': ('parent', 'page_token', 'page_size', ), + 'run_asset_discovery': ('parent', ), + 'set_finding_state': ('name', 'state', 'start_time', ), + 'set_iam_policy': ('resource', 'policy', 'update_mask', ), + 'set_mute': ('name', 'mute', ), + 'test_iam_permissions': ('resource', 'permissions', ), + 'update_big_query_export': ('big_query_export', 'update_mask', ), + 'update_external_system': ('external_system', 'update_mask', ), + 'update_finding': ('finding', 'update_mask', ), + 'update_mute_config': ('mute_config', 'update_mask', ), + 'update_notification_config': ('notification_config', 'update_mask', ), + 'update_organization_settings': ('organization_settings', 'update_mask', ), + 'update_security_health_analytics_custom_module': ('security_health_analytics_custom_module', 'update_mask', ), + 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), + 'update_source': ('source', 'update_mask', ), + } + + 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=securitycenterCallTransformer(), +): + """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 securitycenter 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/owl-bot-staging/v1/setup.py b/owl-bot-staging/v1/setup.py new file mode 100644 index 00000000..f1154c41 --- /dev/null +++ b/owl-bot-staging/v1/setup.py @@ -0,0 +1,91 @@ +# -*- 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 io +import os + +import setuptools # type: ignore + +package_root = os.path.abspath(os.path.dirname(__file__)) + +name = 'google-cloud-securitycenter' + + +description = "Google Cloud Securitycenter API client library" + +version = {} +with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + +dependencies = [ + "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + "proto-plus >= 1.22.0, <2.0.0dev", + "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", + "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", +] +url = "https://github.com/googleapis/python-securitycenter" + +package_root = os.path.abspath(os.path.dirname(__file__)) + +readme_filename = os.path.join(package_root, "README.rst") +with io.open(readme_filename, encoding="utf-8") as readme_file: + readme = readme_file.read() + +packages = [ + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") +] + +namespaces = ["google", "google.cloud"] + +setuptools.setup( + name=name, + version=version, + description=description, + long_description=readme, + author="Google LLC", + author_email="googleapis-packages@google.com", + license="Apache 2.0", + url=url, + classifiers=[ + release_status, + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: OS Independent", + "Topic :: Internet", + ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + namespace_packages=namespaces, + install_requires=dependencies, + include_package_data=True, + zip_safe=False, +) diff --git a/owl-bot-staging/v1/testing/constraints-3.10.txt b/owl-bot-staging/v1/testing/constraints-3.10.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.10.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.11.txt b/owl-bot-staging/v1/testing/constraints-3.11.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.11.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.12.txt b/owl-bot-staging/v1/testing/constraints-3.12.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.12.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.7.txt b/owl-bot-staging/v1/testing/constraints-3.7.txt new file mode 100644 index 00000000..2beecf99 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.7.txt @@ -0,0 +1,10 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file. +# Pin the version to the lower bound. +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.34.0 +proto-plus==1.22.0 +protobuf==3.19.5 +grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1/testing/constraints-3.8.txt b/owl-bot-staging/v1/testing/constraints-3.8.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.8.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.9.txt b/owl-bot-staging/v1/testing/constraints-3.9.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1/testing/constraints-3.9.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/tests/__init__.py b/owl-bot-staging/v1/tests/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1/tests/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1/tests/unit/__init__.py b/owl-bot-staging/v1/tests/unit/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1/tests/unit/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1/tests/unit/gapic/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py new file mode 100644 index 00000000..a136be02 --- /dev/null +++ b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py @@ -0,0 +1,26225 @@ +# -*- 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 os +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import grpc +from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule +from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format + +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import future +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.api_core import operation +from google.api_core import operation_async # type: ignore +from google.api_core import operations_v1 +from google.api_core import path_template +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.securitycenter_v1.services.security_center import SecurityCenterAsyncClient +from google.cloud.securitycenter_v1.services.security_center import SecurityCenterClient +from google.cloud.securitycenter_v1.services.security_center import pagers +from google.cloud.securitycenter_v1.services.security_center import transports +from google.cloud.securitycenter_v1.types import access +from google.cloud.securitycenter_v1.types import bigquery_export +from google.cloud.securitycenter_v1.types import compliance +from google.cloud.securitycenter_v1.types import connection +from google.cloud.securitycenter_v1.types import contact_details +from google.cloud.securitycenter_v1.types import container +from google.cloud.securitycenter_v1.types import database +from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import exfiltration +from google.cloud.securitycenter_v1.types import external_system +from google.cloud.securitycenter_v1.types import external_system as gcs_external_system +from google.cloud.securitycenter_v1.types import file +from google.cloud.securitycenter_v1.types import finding +from google.cloud.securitycenter_v1.types import finding as gcs_finding +from google.cloud.securitycenter_v1.types import iam_binding +from google.cloud.securitycenter_v1.types import indicator +from google.cloud.securitycenter_v1.types import kernel_rootkit +from google.cloud.securitycenter_v1.types import kubernetes +from google.cloud.securitycenter_v1.types import label +from google.cloud.securitycenter_v1.types import mitre_attack +from google.cloud.securitycenter_v1.types import mute_config +from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config +from google.cloud.securitycenter_v1.types import notification_config +from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1.types import organization_settings +from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1.types import process +from google.cloud.securitycenter_v1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import security_marks +from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1.types import securitycenter_service +from google.cloud.securitycenter_v1.types import source +from google.cloud.securitycenter_v1.types import source as gcs_source +from google.cloud.securitycenter_v1.types import vulnerability +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import options_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from google.type import expr_pb2 # type: ignore +import google.auth + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert SecurityCenterClient._get_default_mtls_endpoint(None) is None + assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_info(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +@pytest.mark.parametrize("transport_class,transport_name", [ + (transports.SecurityCenterGrpcTransport, "grpc"), + (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_file(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: + factory.return_value = creds + client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +def test_security_center_client_get_transport_class(): + transport = SecurityCenterClient.get_transport_class() + available_transports = [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterRestTransport, + ] + assert transport in available_transports + + transport = SecurityCenterClient.get_transport_class("grpc") + assert transport == transports.SecurityCenterGrpcTransport + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_client_options(client_class, transport_class, transport_name): + # Check that if channel is provided we won't create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions(api_audience="https://language.googleapis.com") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com" + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class", [ + SecurityCenterClient, SecurityCenterAsyncClient +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), +]) +def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +def test_security_center_client_client_options_from_dict(): + with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: + grpc_transport.return_value = None + client = SecurityCenterClient( + client_options={'api_endpoint': 'squid.clam.whelk'} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), +]) +def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=None, + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.BulkMuteFindingsRequest, + dict, +]) +def test_bulk_mute_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/spam') + response = client.bulk_mute_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.BulkMuteFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_bulk_mute_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + client.bulk_mute_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.BulkMuteFindingsRequest() + +@pytest.mark.asyncio +async def test_bulk_mute_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.BulkMuteFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + response = await client.bulk_mute_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.BulkMuteFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_bulk_mute_findings_async_from_dict(): + await test_bulk_mute_findings_async(request_type=dict) + + +def test_bulk_mute_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.BulkMuteFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + call.return_value = operations_pb2.Operation(name='operations/op') + client.bulk_mute_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_bulk_mute_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.BulkMuteFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) + await client.bulk_mute_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_bulk_mute_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.bulk_mute_findings( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_bulk_mute_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.bulk_mute_findings( + securitycenter_service.BulkMuteFindingsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_bulk_mute_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.bulk_mute_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.bulk_mute_findings( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_bulk_mute_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.bulk_mute_findings( + securitycenter_service.BulkMuteFindingsRequest(), + parent='parent_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_create_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_create_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + client.create_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + )) + response = await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async_from_dict(): + await test_create_security_health_analytics_custom_module_async(request_type=dict) + + +def test_create_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_security_health_analytics_custom_module( + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') + assert arg == mock_val + + +def test_create_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_security_health_analytics_custom_module( + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_create_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + client.create_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + +@pytest.mark.asyncio +async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_create_source_async_from_dict(): + await test_create_source_async(request_type=dict) + + +def test_create_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + + +def test_create_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + response = client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_create_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + client.create_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + +@pytest.mark.asyncio +async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + )) + response = await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +@pytest.mark.asyncio +async def test_create_finding_async_from_dict(): + await test_create_finding_async(request_type=dict) + + +def test_create_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + + +def test_create_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateMuteConfigRequest, + dict, +]) +def test_create_mute_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + response = client.create_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_create_mute_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + client.create_mute_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateMuteConfigRequest() + +@pytest.mark.asyncio +async def test_create_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateMuteConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + )) + response = await client.create_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +@pytest.mark.asyncio +async def test_create_mute_config_async_from_dict(): + await test_create_mute_config_async(request_type=dict) + + +def test_create_mute_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateMuteConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + call.return_value = gcs_mute_config.MuteConfig() + client.create_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_mute_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateMuteConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) + await client.create_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_mute_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_mute_config( + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name='name_value') + assert arg == mock_val + arg = args[0].mute_config_id + mock_val = 'mute_config_id_value' + assert arg == mock_val + + +def test_create_mute_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_mute_config( + securitycenter_service.CreateMuteConfigRequest(), + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + +@pytest.mark.asyncio +async def test_create_mute_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_mute_config( + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name='name_value') + assert arg == mock_val + arg = args[0].mute_config_id + mock_val = 'mute_config_id_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_mute_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_mute_config( + securitycenter_service.CreateMuteConfigRequest(), + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateNotificationConfigRequest, + dict, +]) +def test_create_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_create_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + client.create_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_create_notification_config_async_from_dict(): + await test_create_notification_config_async(request_type=dict) + + +def test_create_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateNotificationConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + call.return_value = gcs_notification_config.NotificationConfig() + client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateNotificationConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + await client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_notification_config( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].config_id + mock_val = 'config_id_value' + assert arg == mock_val + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + + +def test_create_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_notification_config( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].config_id + mock_val = 'config_id_value' + assert arg == mock_val + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteMuteConfigRequest, + dict, +]) +def test_delete_mute_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_mute_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + client.delete_mute_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteMuteConfigRequest() + +@pytest.mark.asyncio +async def test_delete_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteMuteConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_mute_config_async_from_dict(): + await test_delete_mute_config_async(request_type=dict) + + +def test_delete_mute_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteMuteConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + call.return_value = None + client.delete_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_delete_mute_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteMuteConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_delete_mute_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_mute_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_delete_mute_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_mute_config( + securitycenter_service.DeleteMuteConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_delete_mute_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_mute_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_delete_mute_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_mute_config( + securitycenter_service.DeleteMuteConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, +]) +def test_delete_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + client.delete_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_notification_config_async_from_dict(): + await test_delete_notification_config_async(request_type=dict) + + +def test_delete_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + call.return_value = None + client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_delete_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_delete_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_delete_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_delete_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_delete_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_delete_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + client.delete_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async_from_dict(): + await test_delete_security_health_analytics_custom_module_async(request_type=dict) + + +def test_delete_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = None + client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_delete_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_delete_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetBigQueryExportRequest, + dict, +]) +def test_get_big_query_export(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + response = client.get_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_get_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + client.get_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetBigQueryExportRequest() + +@pytest.mark.asyncio +async def test_get_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetBigQueryExportRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + )) + response = await client.get_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +@pytest.mark.asyncio +async def test_get_big_query_export_async_from_dict(): + await test_get_big_query_export_async(request_type=dict) + + +def test_get_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetBigQueryExportRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + call.return_value = bigquery_export.BigQueryExport() + client.get_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetBigQueryExportRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + await client.get_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_big_query_export( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_big_query_export( + securitycenter_service.GetBigQueryExportRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_big_query_export( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_big_query_export( + securitycenter_service.GetBigQueryExportRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + client.get_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_get_iam_policy_async_from_dict(): + await test_get_iam_policy_async(request_type=dict) + + +def test_get_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_get_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.get_iam_policy(request={ + 'resource': 'resource_value', + 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), + } + ) + call.assert_called() + + +def test_get_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_get_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetMuteConfigRequest, + dict, +]) +def test_get_mute_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + response = client.get_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_get_mute_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + client.get_mute_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetMuteConfigRequest() + +@pytest.mark.asyncio +async def test_get_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetMuteConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + )) + response = await client.get_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +@pytest.mark.asyncio +async def test_get_mute_config_async_from_dict(): + await test_get_mute_config_async(request_type=dict) + + +def test_get_mute_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetMuteConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + call.return_value = mute_config.MuteConfig() + client.get_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_mute_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetMuteConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) + await client.get_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_mute_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = mute_config.MuteConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_mute_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_mute_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_mute_config( + securitycenter_service.GetMuteConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_mute_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = mute_config.MuteConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_mute_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_mute_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_mute_config( + securitycenter_service.GetMuteConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetNotificationConfigRequest, + dict, +]) +def test_get_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_get_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + client.get_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_get_notification_config_async_from_dict(): + await test_get_notification_config_async(request_type=dict) + + +def test_get_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + call.return_value = notification_config.NotificationConfig() + client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) + await client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + client.get_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_get_organization_settings_async_from_dict(): + await test_get_organization_settings_async(request_type=dict) + + +def test_get_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = organization_settings.OrganizationSettings() + client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_get_effective_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( + name='name_value', + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + display_name='display_name_value', + ) + response = client.get_effective_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.display_name == 'display_name_value' + + +def test_get_effective_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + client.get_effective_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + +@pytest.mark.asyncio +async def test_get_effective_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( + name='name_value', + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + display_name='display_name_value', + )) + response = await client.get_effective_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.display_name == 'display_name_value' + + +@pytest.mark.asyncio +async def test_get_effective_security_health_analytics_custom_module_async_from_dict(): + await test_get_effective_security_health_analytics_custom_module_async(request_type=dict) + + +def test_get_effective_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + client.get_effective_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_effective_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) + await client.get_effective_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_effective_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_effective_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_effective_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_effective_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_effective_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_effective_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_get_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + response = client.get_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_get_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + client.get_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + +@pytest.mark.asyncio +async def test_get_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + )) + response = await client.get_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +@pytest.mark.asyncio +async def test_get_security_health_analytics_custom_module_async_from_dict(): + await test_get_security_health_analytics_custom_module_async(request_type=dict) + + +def test_get_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + client.get_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + await client.get_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_security_health_analytics_custom_module( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_get_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + client.get_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + +@pytest.mark.asyncio +async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_get_source_async_from_dict(): + await test_get_source_async(request_type=dict) + + +def test_get_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = source.Source() + client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + client.group_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + +@pytest.mark.asyncio +async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_assets_async_from_dict(): + await test_group_assets_async(request_type=dict) + + +def test_group_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = securitycenter_service.GroupAssetsResponse() + client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) + await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + client.group_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + +@pytest.mark.asyncio +async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_findings_async_from_dict(): + await test_group_findings_async(request_type=dict) + + +def test_group_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = securitycenter_service.GroupFindingsResponse() + client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + + +def test_group_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + +@pytest.mark.asyncio +async def test_group_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_group_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + client.list_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + +@pytest.mark.asyncio +async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_assets_async_from_dict(): + await test_list_assets_async(request_type=dict) + + +def test_list_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = securitycenter_service.ListAssetsResponse() + client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) + await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) +def test_list_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = list(client.list_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_descendant_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_descendant_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_descendant_security_health_analytics_custom_modules_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + client.list_descendant_security_health_analytics_custom_modules() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_descendant_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_async_from_dict(): + await test_list_descendant_security_health_analytics_custom_modules_async(request_type=dict) + + +def test_list_descendant_security_health_analytics_custom_modules_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + client.list_descendant_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) + await client.list_descendant_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_descendant_security_health_analytics_custom_modules_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_descendant_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_descendant_security_health_analytics_custom_modules_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_descendant_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_descendant_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_descendant_security_health_analytics_custom_modules(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in results) +def test_list_descendant_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list(client.list_descendant_security_health_analytics_custom_modules(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_descendant_security_health_analytics_custom_modules(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_descendant_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_descendant_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_descendant_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + client.list_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + +@pytest.mark.asyncio +async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_findings_async_from_dict(): + await test_list_findings_async(request_type=dict) + + +def test_list_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = securitycenter_service.ListFindingsResponse() + client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) + await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in results) +def test_list_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + pages = list(client.list_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListMuteConfigsRequest, + dict, +]) +def test_list_mute_configs(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListMuteConfigsResponse( + next_page_token='next_page_token_value', + ) + response = client.list_mute_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListMuteConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListMuteConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_mute_configs_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + client.list_mute_configs() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListMuteConfigsRequest() + +@pytest.mark.asyncio +async def test_list_mute_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListMuteConfigsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_mute_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListMuteConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListMuteConfigsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_mute_configs_async_from_dict(): + await test_list_mute_configs_async(request_type=dict) + + +def test_list_mute_configs_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListMuteConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + call.return_value = securitycenter_service.ListMuteConfigsResponse() + client.list_mute_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_mute_configs_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListMuteConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) + await client.list_mute_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_mute_configs_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListMuteConfigsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_mute_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_mute_configs_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_mute_configs_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListMuteConfigsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_mute_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_mute_configs_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), + parent='parent_value', + ) + + +def test_list_mute_configs_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], + next_page_token='def', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_mute_configs(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, mute_config.MuteConfig) + for i in results) +def test_list_mute_configs_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], + next_page_token='def', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + ), + RuntimeError, + ) + pages = list(client.list_mute_configs(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_mute_configs_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], + next_page_token='def', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_mute_configs(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, mute_config.MuteConfig) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_mute_configs_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_mute_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], + next_page_token='def', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_mute_configs(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListNotificationConfigsRequest, + dict, +]) +def test_list_notification_configs(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + ) + response = client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_notification_configs_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + client.list_notification_configs() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + +@pytest.mark.asyncio +async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_from_dict(): + await test_list_notification_configs_async(request_type=dict) + + +def test_list_notification_configs_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListNotificationConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_notification_configs_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListNotificationConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) + await client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_notification_configs_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_notification_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_notification_configs_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_notification_configs_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_notification_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_notification_configs_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + + +def test_list_notification_configs_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_notification_configs(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in results) +def test_list_notification_configs_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = list(client.list_notification_configs(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_notification_configs(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_effective_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_effective_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_effective_security_health_analytics_custom_modules_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + client.list_effective_security_health_analytics_custom_modules() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_effective_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_from_dict(): + await test_list_effective_security_health_analytics_custom_modules_async(request_type=dict) + + +def test_list_effective_security_health_analytics_custom_modules_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + client.list_effective_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) + await client.list_effective_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_effective_security_health_analytics_custom_modules_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_effective_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_effective_security_health_analytics_custom_modules_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_effective_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_effective_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_effective_security_health_analytics_custom_modules(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + for i in results) +def test_list_effective_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list(client.list_effective_security_health_analytics_custom_modules(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_effective_security_health_analytics_custom_modules(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_effective_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_security_health_analytics_custom_modules_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + client.list_security_health_analytics_custom_modules() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_from_dict(): + await test_list_security_health_analytics_custom_modules_async(request_type=dict) + + +def test_list_security_health_analytics_custom_modules_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + client.list_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) + await client.list_security_health_analytics_custom_modules(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_security_health_analytics_custom_modules_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_security_health_analytics_custom_modules_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_security_health_analytics_custom_modules( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_security_health_analytics_custom_modules(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in results) +def test_list_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list(client.list_security_health_analytics_custom_modules(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_security_health_analytics_custom_modules(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + client.list_sources() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + +@pytest.mark.asyncio +async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_sources_async_from_dict(): + await test_list_sources_async(request_type=dict) + + +def test_list_sources_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = securitycenter_service.ListSourcesResponse() + client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_sources_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_sources_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_sources_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_sources_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_sources_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_sources(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) +def test_list_sources_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = list(client.list_sources(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_sources_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_sources(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, source.Source) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_sources_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/spam') + response = client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_run_asset_discovery_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + client.run_asset_discovery() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + +@pytest.mark.asyncio +async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + response = await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_run_asset_discovery_async_from_dict(): + await test_run_asset_discovery_async(request_type=dict) + + +def test_run_asset_discovery_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = operations_pb2.Operation(name='operations/op') + client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_run_asset_discovery_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) + await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_run_asset_discovery_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_run_asset_discovery_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + response = client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_set_finding_state_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + client.set_finding_state() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + +@pytest.mark.asyncio +async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + )) + response = await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +@pytest.mark.asyncio +async def test_set_finding_state_async_from_dict(): + await test_set_finding_state_async(request_type=dict) + + +def test_set_finding_state_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = finding.Finding() + client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_finding_state_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_set_finding_state_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + + +def test_set_finding_state_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetMuteRequest, + dict, +]) +def test_set_mute(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + response = client.set_mute(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetMuteRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_set_mute_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + client.set_mute() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetMuteRequest() + +@pytest.mark.asyncio +async def test_set_mute_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetMuteRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + )) + response = await client.set_mute(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetMuteRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +@pytest.mark.asyncio +async def test_set_mute_async_from_dict(): + await test_set_mute_async(request_type=dict) + + +def test_set_mute_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetMuteRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + call.return_value = finding.Finding() + client.set_mute(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_mute_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetMuteRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_mute(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_set_mute_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_mute( + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED + assert arg == mock_val + + +def test_set_mute_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_mute( + securitycenter_service.SetMuteRequest(), + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + +@pytest.mark.asyncio +async def test_set_mute_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_mute), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_mute( + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED + assert arg == mock_val + +@pytest.mark.asyncio +async def test_set_mute_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_mute( + securitycenter_service.SetMuteRequest(), + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + client.set_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_set_iam_policy_async_from_dict(): + await test_set_iam_policy_async(request_type=dict) + + +def test_set_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_set_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.set_iam_policy(request={ + 'resource': 'resource_value', + 'policy': policy_pb2.Policy(version=774), + 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), + } + ) + call.assert_called() + + +def test_set_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_set_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + response = client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + client.test_iam_permissions() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + +@pytest.mark.asyncio +async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + )) + response = await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_async_from_dict(): + await test_test_iam_permissions_async(request_type=dict) + + +def test_test_iam_permissions_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_test_iam_permissions_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + response = client.test_iam_permissions(request={ + 'resource': 'resource_value', + 'permissions': ['permissions_value'], + } + ) + call.assert_called() + + +def test_test_iam_permissions_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + + +def test_test_iam_permissions_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateExternalSystemRequest, + dict, +]) +def test_update_external_system(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_external_system.ExternalSystem( + name='name_value', + assignees=['assignees_value'], + external_uid='external_uid_value', + status='status_value', + ) + response = client.update_external_system(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_external_system.ExternalSystem) + assert response.name == 'name_value' + assert response.assignees == ['assignees_value'] + assert response.external_uid == 'external_uid_value' + assert response.status == 'status_value' + + +def test_update_external_system_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + client.update_external_system() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + +@pytest.mark.asyncio +async def test_update_external_system_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateExternalSystemRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem( + name='name_value', + assignees=['assignees_value'], + external_uid='external_uid_value', + status='status_value', + )) + response = await client.update_external_system(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_external_system.ExternalSystem) + assert response.name == 'name_value' + assert response.assignees == ['assignees_value'] + assert response.external_uid == 'external_uid_value' + assert response.status == 'status_value' + + +@pytest.mark.asyncio +async def test_update_external_system_async_from_dict(): + await test_update_external_system_async(request_type=dict) + + +def test_update_external_system_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateExternalSystemRequest() + + request.external_system.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + call.return_value = gcs_external_system.ExternalSystem() + client.update_external_system(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'external_system.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_external_system_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateExternalSystemRequest() + + request.external_system.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) + await client.update_external_system(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'external_system.name=name_value', + ) in kw['metadata'] + + +def test_update_external_system_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_external_system.ExternalSystem() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_external_system_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_external_system_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_external_system), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_external_system.ExternalSystem() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_external_system_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + response = client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_update_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + client.update_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + +@pytest.mark.asyncio +async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + )) + response = await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +@pytest.mark.asyncio +async def test_update_finding_async_from_dict(): + await test_update_finding_async(request_type=dict) + + +def test_update_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +def test_update_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + + +def test_update_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateMuteConfigRequest, + dict, +]) +def test_update_mute_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + response = client.update_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_update_mute_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + client.update_mute_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + +@pytest.mark.asyncio +async def test_update_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateMuteConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + )) + response = await client.update_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +@pytest.mark.asyncio +async def test_update_mute_config_async_from_dict(): + await test_update_mute_config_async(request_type=dict) + + +def test_update_mute_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateMuteConfigRequest() + + request.mute_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + call.return_value = gcs_mute_config.MuteConfig() + client.update_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'mute_config.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_mute_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateMuteConfigRequest() + + request.mute_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) + await client.update_mute_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'mute_config.name=name_value', + ) in kw['metadata'] + + +def test_update_mute_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_mute_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_mute_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_mute_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_mute_config.MuteConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_mute_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateNotificationConfigRequest, + dict, +]) +def test_update_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_update_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + client.update_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_update_notification_config_async_from_dict(): + await test_update_notification_config_async(request_type=dict) + + +def test_update_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateNotificationConfigRequest() + + request.notification_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + call.return_value = gcs_notification_config.NotificationConfig() + client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'notification_config.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateNotificationConfigRequest() + + request.notification_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + await client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'notification_config.name=name_value', + ) in kw['metadata'] + + +def test_update_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + client.update_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_update_organization_settings_async_from_dict(): + await test_update_organization_settings_async(request_type=dict) + + +def test_update_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = gcs_organization_settings.OrganizationSettings() + client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +def test_update_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + + +def test_update_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_update_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + response = client.update_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_update_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + client.update_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + +@pytest.mark.asyncio +async def test_update_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + )) + response = await client.update_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +@pytest.mark.asyncio +async def test_update_security_health_analytics_custom_module_async_from_dict(): + await test_update_security_health_analytics_custom_module_async(request_type=dict) + + +def test_update_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + + request.security_health_analytics_custom_module.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + client.update_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_health_analytics_custom_module.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + + request.security_health_analytics_custom_module.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + await client.update_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_health_analytics_custom_module.name=name_value', + ) in kw['metadata'] + + +def test_update_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_health_analytics_custom_module), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + client.update_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + +@pytest.mark.asyncio +async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_update_source_async_from_dict(): + await test_update_source_async(request_type=dict) + + +def test_update_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +def test_update_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_source( + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + + +def test_update_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_source( + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + ) + response = client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_security_marks_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + client.update_security_marks() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + +@pytest.mark.asyncio +async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + )) + response = await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_update_security_marks_async_from_dict(): + await test_update_security_marks_async(request_type=dict) + + +def test_update_security_marks_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = gcs_security_marks.SecurityMarks() + client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_security_marks_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +def test_update_security_marks_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + + +def test_update_security_marks_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateBigQueryExportRequest, + dict, +]) +def test_create_big_query_export(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + response = client.create_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_create_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + client.create_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + +@pytest.mark.asyncio +async def test_create_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateBigQueryExportRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + )) + response = await client.create_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +@pytest.mark.asyncio +async def test_create_big_query_export_async_from_dict(): + await test_create_big_query_export_async(request_type=dict) + + +def test_create_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + call.return_value = bigquery_export.BigQueryExport() + client.create_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + await client.create_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_big_query_export( + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name='name_value') + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = 'big_query_export_id_value' + assert arg == mock_val + + +def test_create_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_big_query_export( + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name='name_value') + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = 'big_query_export_id_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteBigQueryExportRequest, + dict, +]) +def test_delete_big_query_export(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + client.delete_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + +@pytest.mark.asyncio +async def test_delete_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteBigQueryExportRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_big_query_export_async_from_dict(): + await test_delete_big_query_export_async(request_type=dict) + + +def test_delete_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + call.return_value = None + client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_delete_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_delete_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_big_query_export( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_delete_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_big_query_export( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateBigQueryExportRequest, + dict, +]) +def test_update_big_query_export(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + response = client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_update_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + client.update_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + +@pytest.mark.asyncio +async def test_update_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateBigQueryExportRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + )) + response = await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +@pytest.mark.asyncio +async def test_update_big_query_export_async_from_dict(): + await test_update_big_query_export_async(request_type=dict) + + +def test_update_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + call.return_value = bigquery_export.BigQueryExport() + client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'big_query_export.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'big_query_export.name=name_value', + ) in kw['metadata'] + + +def test_update_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListBigQueryExportsRequest, + dict, +]) +def test_list_big_query_exports(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse( + next_page_token='next_page_token_value', + ) + response = client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_big_query_exports_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + client.list_big_query_exports() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + +@pytest.mark.asyncio +async def test_list_big_query_exports_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListBigQueryExportsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_from_dict(): + await test_list_big_query_exports_async(request_type=dict) + + +def test_list_big_query_exports_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_big_query_exports_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) + await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_big_query_exports_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_big_query_exports( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_big_query_exports_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_big_query_exports( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent='parent_value', + ) + + +def test_list_big_query_exports_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token='abc', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token='def', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_big_query_exports(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) + for i in results) +def test_list_big_query_exports_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token='abc', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token='def', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = list(client.list_big_query_exports(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token='abc', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token='def', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_big_query_exports(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token='abc', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token='def', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_big_query_exports(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.BulkMuteFindingsRequest, + dict, +]) +def test_bulk_mute_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.bulk_mute_findings(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_bulk_mute_findings_rest_required_fields(request_type=securitycenter_service.BulkMuteFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.bulk_mute_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_bulk_mute_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_bulk_mute_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(operation.Operation, "_set_result_from_operation"), \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.BulkMuteFindingsRequest.pb(securitycenter_service.BulkMuteFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) + + request = securitycenter_service.BulkMuteFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.bulk_mute_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_bulk_mute_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.BulkMuteFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.bulk_mute_findings(request) + + +def test_bulk_mute_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.bulk_mute_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, args[1]) + + +def test_bulk_mute_findings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.bulk_mute_findings( + securitycenter_service.BulkMuteFindingsRequest(), + parent='parent_value', + ) + + +def test_bulk_mute_findings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_create_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_create_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_security_health_analytics_custom_module(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_security_health_analytics_custom_module._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "securityHealthAnalyticsCustomModule", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_security_health_analytics_custom_module_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_security_health_analytics_custom_module") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_security_health_analytics_custom_module") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + client.create_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_security_health_analytics_custom_module(request) + + +def test_create_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) + + +def test_create_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent='parent_value', + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + ) + + +def test_create_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.CreateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_source(request) + + +def test_create_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_create_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +def test_create_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["finding_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "findingId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == request_init["finding_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["findingId"] = 'finding_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("finding_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == 'finding_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_finding(request) + + expected_params = [ + ( + "findingId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.CreateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_finding(request) + + +def test_create_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) + + +def test_create_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +def test_create_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateMuteConfigRequest, + dict, +]) +def test_create_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_mute_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_create_mute_config_rest_required_fields(request_type=securitycenter_service.CreateMuteConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["mute_config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "muteConfigId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["muteConfigId"] = 'mute_config_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("mute_config_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == 'mute_config_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_mute_config(request) + + expected_params = [ + ( + "muteConfigId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("muteConfigId", )) & set(("parent", "muteConfig", "muteConfigId", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_mute_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_mute_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateMuteConfigRequest.pb(securitycenter_service.CreateMuteConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) + + request = securitycenter_service.CreateMuteConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.create_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateMuteConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_mute_config(request) + + +def test_create_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) + + +def test_create_mute_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_mute_config( + securitycenter_service.CreateMuteConfigRequest(), + parent='parent_value', + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + mute_config_id='mute_config_id_value', + ) + + +def test_create_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateNotificationConfigRequest, + dict, +]) +def test_create_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "configId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "configId" in jsonified_request + assert jsonified_request["configId"] == request_init["config_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["configId"] = 'config_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("config_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "configId" in jsonified_request + assert jsonified_request["configId"] == 'config_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_notification_config(request) + + expected_params = [ + ( + "configId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) + + request = securitycenter_service.CreateNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_notification_config(request) + + +def test_create_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) + + +def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + +def test_create_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteMuteConfigRequest, + dict, +]) +def test_delete_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.delete_mute_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_mute_config_rest_required_fields(request_type=securitycenter_service.DeleteMuteConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "delete", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_mute_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_delete_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.delete_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_mute_config") as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteMuteConfigRequest.pb(securitycenter_service.DeleteMuteConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteMuteConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + + +def test_delete_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteMuteConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_mute_config(request) + + +def test_delete_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.delete_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) + + +def test_delete_mute_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_mute_config( + securitycenter_service.DeleteMuteConfigRequest(), + name='name_value', + ) + + +def test_delete_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, +]) +def test_delete_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.delete_notification_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "delete", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_delete_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + + +def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_notification_config(request) + + +def test_delete_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.delete_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + + +def test_delete_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_delete_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "delete", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_security_health_analytics_custom_module(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_delete_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.delete_security_health_analytics_custom_module._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_security_health_analytics_custom_module_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_security_health_analytics_custom_module") as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + + +def test_delete_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_security_health_analytics_custom_module(request) + + +def test_delete_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.delete_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) + + +def test_delete_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +def test_delete_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetBigQueryExportRequest, + dict, +]) +def test_get_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_big_query_export(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_get_big_query_export_rest_required_fields(request_type=securitycenter_service.GetBigQueryExportRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_big_query_export(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_big_query_export") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_big_query_export") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetBigQueryExportRequest.pb(securitycenter_service.GetBigQueryExportRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) + + request = securitycenter_service.GetBigQueryExportRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = bigquery_export.BigQueryExport() + + client.get_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetBigQueryExportRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_big_query_export(request) + + +def test_get_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) + + +def test_get_big_query_export_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_big_query_export( + securitycenter_service.GetBigQueryExportRequest(), + name='name_value', + ) + + +def test_get_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.GetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.GetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) + + +def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_get_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetMuteConfigRequest, + dict, +]) +def test_get_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_mute_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_get_mute_config_rest_required_fields(request_type=securitycenter_service.GetMuteConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = mute_config.MuteConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_mute_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_mute_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_mute_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetMuteConfigRequest.pb(securitycenter_service.GetMuteConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = mute_config.MuteConfig.to_json(mute_config.MuteConfig()) + + request = securitycenter_service.GetMuteConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = mute_config.MuteConfig() + + client.get_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetMuteConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_mute_config(request) + + +def test_get_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = mute_config.MuteConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) + + +def test_get_mute_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_mute_config( + securitycenter_service.GetMuteConfigRequest(), + name='name_value', + ) + + +def test_get_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetNotificationConfigRequest, + dict, +]) +def test_get_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) + + request = securitycenter_service.GetNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = notification_config.NotificationConfig() + + client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_notification_config(request) + + +def test_get_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + + +def test_get_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) + + request = securitycenter_service.GetOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = organization_settings.OrganizationSettings() + + client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_organization_settings(request) + + +def test_get_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/organizationSettings'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +def test_get_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_get_effective_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( + name='name_value', + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + display_name='display_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_effective_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.display_name == 'display_name_value' + + +def test_get_effective_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_effective_security_health_analytics_custom_module(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_effective_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_effective_security_health_analytics_custom_module._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_effective_security_health_analytics_custom_module_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_effective_security_health_analytics_custom_module") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_effective_security_health_analytics_custom_module") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.to_json(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) + + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + + client.get_effective_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_effective_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_effective_security_health_analytics_custom_module(request) + + +def test_get_effective_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_effective_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}" % client.transport._host, args[1]) + + +def test_get_effective_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +def test_get_effective_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_get_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_get_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_security_health_analytics_custom_module(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_security_health_analytics_custom_module._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_security_health_analytics_custom_module_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_security_health_analytics_custom_module") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_security_health_analytics_custom_module") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + client.get_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_security_health_analytics_custom_module(request) + + +def test_get_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) + + +def test_get_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name='name_value', + ) + + +def test_get_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = source.Source.to_json(source.Source()) + + request = securitycenter_service.GetSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = source.Source() + + client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_source(request) + + +def test_get_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_get_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +def test_get_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) + + request = securitycenter_service.GroupAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupAssetsResponse() + + client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_assets(request) + + +def test_group_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.group_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) + + request = securitycenter_service.GroupFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupFindingsResponse() + + client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_findings(request) + + +def test_group_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + group_by='group_by_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.group_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) + + +def test_group_findings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.group_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) + + request = securitycenter_service.ListAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListAssetsResponse() + + client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_assets(request) + + +def test_list_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) + + pages = list(client.list_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_descendant_security_health_analytics_custom_modules_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_descendant_security_health_analytics_custom_modules(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_descendant_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_descendant_security_health_analytics_custom_modules(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_descendant_security_health_analytics_custom_modules_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_descendant_security_health_analytics_custom_modules._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_descendant_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_descendant_security_health_analytics_custom_modules") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_descendant_security_health_analytics_custom_modules") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) + + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + + client.list_descendant_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_descendant_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_descendant_security_health_analytics_custom_modules(request) + + +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_descendant_security_health_analytics_custom_modules(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant" % client.transport._host, args[1]) + + +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_descendant_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + pager = client.list_descendant_security_health_analytics_custom_modules(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in results) + + pages = list(client.list_descendant_security_health_analytics_custom_modules(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) + + request = securitycenter_service.ListFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListFindingsResponse() + + client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_findings(request) + + +def test_list_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.list_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in results) + + pages = list(client.list_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListMuteConfigsRequest, + dict, +]) +def test_list_mute_configs_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListMuteConfigsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_mute_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListMuteConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_mute_configs_rest_required_fields(request_type=securitycenter_service.ListMuteConfigsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListMuteConfigsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_mute_configs(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_mute_configs_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_mute_configs._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_mute_configs_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_mute_configs") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_mute_configs") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListMuteConfigsRequest.pb(securitycenter_service.ListMuteConfigsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListMuteConfigsResponse.to_json(securitycenter_service.ListMuteConfigsResponse()) + + request = securitycenter_service.ListMuteConfigsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListMuteConfigsResponse() + + client.list_mute_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_mute_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListMuteConfigsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_mute_configs(request) + + +def test_list_mute_configs_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListMuteConfigsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_mute_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) + + +def test_list_mute_configs_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), + parent='parent_value', + ) + + +def test_list_mute_configs_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], + next_page_token='def', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_mute_configs(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, mute_config.MuteConfig) + for i in results) + + pages = list(client.list_mute_configs(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListNotificationConfigsRequest, + dict, +]) +def test_list_notification_configs_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_notification_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_notification_configs(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_notification_configs_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_notification_configs._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_notification_configs_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) + + request = securitycenter_service.ListNotificationConfigsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListNotificationConfigsResponse() + + client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_notification_configs(request) + + +def test_list_notification_configs_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_notification_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) + + +def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + + +def test_list_notification_configs_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_notification_configs(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in results) + + pages = list(client.list_notification_configs(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_effective_security_health_analytics_custom_modules_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_effective_security_health_analytics_custom_modules(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_effective_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_effective_security_health_analytics_custom_modules(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_effective_security_health_analytics_custom_modules_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_effective_security_health_analytics_custom_modules._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_effective_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_effective_security_health_analytics_custom_modules") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_effective_security_health_analytics_custom_modules") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) + + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + + client.list_effective_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_effective_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_effective_security_health_analytics_custom_modules(request) + + +def test_list_effective_security_health_analytics_custom_modules_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_effective_security_health_analytics_custom_modules(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules" % client.transport._host, args[1]) + + +def test_list_effective_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_effective_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + pager = client.list_effective_security_health_analytics_custom_modules(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) + for i in results) + + pages = list(client.list_effective_security_health_analytics_custom_modules(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, +]) +def test_list_security_health_analytics_custom_modules_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_security_health_analytics_custom_modules(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_security_health_analytics_custom_modules(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_security_health_analytics_custom_modules_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_security_health_analytics_custom_modules._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_security_health_analytics_custom_modules") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_security_health_analytics_custom_modules") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) + + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + + client.list_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_security_health_analytics_custom_modules(request) + + +def test_list_security_health_analytics_custom_modules_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_security_health_analytics_custom_modules(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) + + +def test_list_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent='parent_value', + ) + + +def test_list_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token='def', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} + + pager = client.list_security_health_analytics_custom_modules(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + for i in results) + + pages = list(client.list_security_health_analytics_custom_modules(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_sources(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_sources(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_sources_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_sources._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_sources_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) + + request = securitycenter_service.ListSourcesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListSourcesResponse() + + client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_sources(request) + + +def test_list_sources_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_sources(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_list_sources_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_sources(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) + + pages = list(client.list_sources(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.run_asset_discovery(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.run_asset_discovery(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_run_asset_discovery_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_run_asset_discovery_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(operation.Operation, "_set_result_from_operation"), \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) + + request = securitycenter_service.RunAssetDiscoveryRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.run_asset_discovery(request) + + +def test_run_asset_discovery_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.run_asset_discovery(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) + + +def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +def test_run_asset_discovery_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_finding_state(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_finding_state(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_finding_state_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_finding_state._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_finding_state_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = finding.Finding.to_json(finding.Finding()) + + request = securitycenter_service.SetFindingStateRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = finding.Finding() + + client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_finding_state(request) + + +def test_set_finding_state_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_finding_state(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) + + +def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +def test_set_finding_state_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetMuteRequest, + dict, +]) +def test_set_mute_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_mute(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_set_mute_rest_required_fields(request_type=securitycenter_service.SetMuteRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_mute(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_mute_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_mute._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", "mute", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_mute_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_mute") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_mute") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.SetMuteRequest.pb(securitycenter_service.SetMuteRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = finding.Finding.to_json(finding.Finding()) + + request = securitycenter_service.SetMuteRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = finding.Finding() + + client.set_mute(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_mute_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetMuteRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_mute(request) + + +def test_set_mute_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_mute(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" % client.transport._host, args[1]) + + +def test_set_mute_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_mute( + securitycenter_service.SetMuteRequest(), + name='name_value', + mute=finding.Finding.Mute.MUTED, + ) + + +def test_set_mute_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.SetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.SetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) + + +def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_set_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.test_iam_permissions(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request_init["permissions"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + jsonified_request["permissions"] = 'permissions_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + assert "permissions" in jsonified_request + assert jsonified_request["permissions"] == 'permissions_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.test_iam_permissions(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_test_iam_permissions_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_test_iam_permissions_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.TestIamPermissionsRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) + + request = iam_policy_pb2.TestIamPermissionsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.test_iam_permissions(request) + + +def test_test_iam_permissions_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + permissions=['permissions_value'], + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.test_iam_permissions(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) + + +def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +def test_test_iam_permissions_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateExternalSystemRequest, + dict, +]) +def test_update_external_system_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} + request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_external_system.ExternalSystem( + name='name_value', + assignees=['assignees_value'], + external_uid='external_uid_value', + status='status_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_external_system(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_external_system.ExternalSystem) + assert response.name == 'name_value' + assert response.assignees == ['assignees_value'] + assert response.external_uid == 'external_uid_value' + assert response.status == 'status_value' + + +def test_update_external_system_rest_required_fields(request_type=securitycenter_service.UpdateExternalSystemRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_external_system.ExternalSystem() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_external_system(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_external_system_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_external_system._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("externalSystem", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_external_system_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_external_system") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_external_system") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateExternalSystemRequest.pb(securitycenter_service.UpdateExternalSystemRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_external_system.ExternalSystem.to_json(gcs_external_system.ExternalSystem()) + + request = securitycenter_service.UpdateExternalSystemRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_external_system.ExternalSystem() + + client.update_external_system(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_external_system_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateExternalSystemRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} + request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_external_system(request) + + +def test_update_external_system_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_external_system.ExternalSystem() + + # get arguments that satisfy an http rule for this method + sample_request = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} + + # get truthy value for each flattened field + mock_args = dict( + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_external_system(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" % client.transport._host, args[1]) + + +def test_update_external_system_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_external_system_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator='mute_initiator_value', + parent_display_name='parent_display_name_value', + description='description_value', + next_steps='next_steps_value', + module_name='module_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == 'mute_initiator_value' + assert response.parent_display_name == 'parent_display_name_value' + assert response.description == 'description_value' + assert response.next_steps == 'next_steps_value' + assert response.module_name == 'module_name_value' + + +def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_finding(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.UpdateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_finding(request) + + +def test_update_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + + # get truthy value for each flattened field + mock_args = dict( + finding=gcs_finding.Finding(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) + + +def test_update_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + + +def test_update_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateMuteConfigRequest, + dict, +]) +def test_update_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} + request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig( + name='name_value', + display_name='display_name_value', + description='description_value', + filter='filter_value', + most_recent_editor='most_recent_editor_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_mute_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.most_recent_editor == 'most_recent_editor_value' + + +def test_update_mute_config_rest_required_fields(request_type=securitycenter_service.UpdateMuteConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_mute_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("muteConfig", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_mute_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_mute_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateMuteConfigRequest.pb(securitycenter_service.UpdateMuteConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) + + request = securitycenter_service.UpdateMuteConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.update_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateMuteConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} + request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_mute_config(request) + + +def test_update_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) + + +def test_update_mute_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateNotificationConfigRequest, + dict, +]) +def test_update_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) + + request = securitycenter_service.UpdateNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_notification_config(request) + + +def test_update_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) + + request = securitycenter_service.UpdateOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_organization_settings.OrganizationSettings() + + client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_organization_settings(request) + + +def test_update_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + + # get truthy value for each flattened field + mock_args = dict( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +def test_update_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, +]) +def test_update_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} + request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name='name_value', + display_name='display_name_value', + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor='last_editor_value', + ancestor_module='ancestor_module_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + assert response.last_editor == 'last_editor_value' + assert response.ancestor_module == 'ancestor_module_value' + + +def test_update_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_security_health_analytics_custom_module(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_security_health_analytics_custom_module._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("securityHealthAnalyticsCustomModule", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_security_health_analytics_custom_module_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_health_analytics_custom_module") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_health_analytics_custom_module") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) + + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + client.update_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} + request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_security_health_analytics_custom_module(request) + + +def test_update_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + + # get arguments that satisfy an http rule for this method + sample_request = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) + + +def test_update_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.UpdateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_source(request) + + +def test_update_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + source=gcs_source.Source(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_update_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + + +def test_update_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_security_marks(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("start_time", "update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_security_marks(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_security_marks_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_security_marks._get_unset_required_fields({}) + assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_security_marks_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) + + request = securitycenter_service.UpdateSecurityMarksRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_security_marks.SecurityMarks() + + client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_security_marks(request) + + +def test_update_security_marks_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + + # get arguments that satisfy an http rule for this method + sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + + # get truthy value for each flattened field + mock_args = dict( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_security_marks(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) + + +def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + +def test_update_security_marks_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateBigQueryExportRequest, + dict, +]) +def test_create_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_big_query_export(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_create_big_query_export_rest_required_fields(request_type=securitycenter_service.CreateBigQueryExportRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["big_query_export_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "bigQueryExportId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "bigQueryExportId" in jsonified_request + assert jsonified_request["bigQueryExportId"] == request_init["big_query_export_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["bigQueryExportId"] = 'big_query_export_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("big_query_export_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "bigQueryExportId" in jsonified_request + assert jsonified_request["bigQueryExportId"] == 'big_query_export_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_big_query_export(request) + + expected_params = [ + ( + "bigQueryExportId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(("bigQueryExportId", )) & set(("parent", "bigQueryExport", "bigQueryExportId", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_big_query_export") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_big_query_export") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateBigQueryExportRequest.pb(securitycenter_service.CreateBigQueryExportRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) + + request = securitycenter_service.CreateBigQueryExportRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = bigquery_export.BigQueryExport() + + client.create_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateBigQueryExportRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_big_query_export(request) + + +def test_create_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) + + +def test_create_big_query_export_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), + parent='parent_value', + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + big_query_export_id='big_query_export_id_value', + ) + + +def test_create_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteBigQueryExportRequest, + dict, +]) +def test_delete_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.delete_big_query_export(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_big_query_export_rest_required_fields(request_type=securitycenter_service.DeleteBigQueryExportRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "delete", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_big_query_export(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_delete_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.delete_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_big_query_export") as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteBigQueryExportRequest.pb(securitycenter_service.DeleteBigQueryExportRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteBigQueryExportRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + + +def test_delete_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteBigQueryExportRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_big_query_export(request) + + +def test_delete_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.delete_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) + + +def test_delete_big_query_export_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name='name_value', + ) + + +def test_delete_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateBigQueryExportRequest, + dict, +]) +def test_update_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} + request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport( + name='name_value', + description='description_value', + filter='filter_value', + dataset='dataset_value', + most_recent_editor='most_recent_editor_value', + principal='principal_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_big_query_export(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.filter == 'filter_value' + assert response.dataset == 'dataset_value' + assert response.most_recent_editor == 'most_recent_editor_value' + assert response.principal == 'principal_value' + + +def test_update_big_query_export_rest_required_fields(request_type=securitycenter_service.UpdateBigQueryExportRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_big_query_export(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("bigQueryExport", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_big_query_export") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_big_query_export") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateBigQueryExportRequest.pb(securitycenter_service.UpdateBigQueryExportRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) + + request = securitycenter_service.UpdateBigQueryExportRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = bigquery_export.BigQueryExport() + + client.update_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateBigQueryExportRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} + request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_big_query_export(request) + + +def test_update_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + + # get arguments that satisfy an http rule for this method + sample_request = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{big_query_export.name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) + + +def test_update_big_query_export_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListBigQueryExportsRequest, + dict, +]) +def test_list_big_query_exports_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListBigQueryExportsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_big_query_exports(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_big_query_exports_rest_required_fields(request_type=securitycenter_service.ListBigQueryExportsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListBigQueryExportsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_big_query_exports(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_big_query_exports_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_big_query_exports._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_big_query_exports_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_big_query_exports") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_big_query_exports") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListBigQueryExportsRequest.pb(securitycenter_service.ListBigQueryExportsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListBigQueryExportsResponse.to_json(securitycenter_service.ListBigQueryExportsResponse()) + + request = securitycenter_service.ListBigQueryExportsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListBigQueryExportsResponse() + + client.list_big_query_exports(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_big_query_exports_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListBigQueryExportsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_big_query_exports(request) + + +def test_list_big_query_exports_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListBigQueryExportsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_big_query_exports(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) + + +def test_list_big_query_exports_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent='parent_value', + ) + + +def test_list_big_query_exports_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token='abc', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token='def', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListBigQueryExportsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_big_query_exports(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) + for i in results) + + pages = list(client.list_big_query_exports(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = SecurityCenterClient(transport=transport) + assert client.transport is transport + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.SecurityCenterGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + +@pytest.mark.parametrize("transport_class", [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, +]) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "rest", +]) +def test_transport_kind(transport_name): + transport = SecurityCenterClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.SecurityCenterGrpcTransport, + ) + +def test_security_center_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json" + ) + + +def test_security_center_base_transport(): + # Instantiate the base transport. + with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: + Transport.return_value = None + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + 'bulk_mute_findings', + 'create_security_health_analytics_custom_module', + 'create_source', + 'create_finding', + 'create_mute_config', + 'create_notification_config', + 'delete_mute_config', + 'delete_notification_config', + 'delete_security_health_analytics_custom_module', + 'get_big_query_export', + 'get_iam_policy', + 'get_mute_config', + 'get_notification_config', + 'get_organization_settings', + 'get_effective_security_health_analytics_custom_module', + 'get_security_health_analytics_custom_module', + 'get_source', + 'group_assets', + 'group_findings', + 'list_assets', + 'list_descendant_security_health_analytics_custom_modules', + 'list_findings', + 'list_mute_configs', + 'list_notification_configs', + 'list_effective_security_health_analytics_custom_modules', + 'list_security_health_analytics_custom_modules', + 'list_sources', + 'run_asset_discovery', + 'set_finding_state', + 'set_mute', + 'set_iam_policy', + 'test_iam_permissions', + 'update_external_system', + 'update_finding', + 'update_mute_config', + 'update_notification_config', + 'update_organization_settings', + 'update_security_health_analytics_custom_module', + 'update_source', + 'update_security_marks', + 'create_big_query_export', + 'delete_big_query_export', + 'update_big_query_export', + 'list_big_query_exports', + 'get_operation', + 'cancel_operation', + 'delete_operation', + 'list_operations', + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + 'kind', + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_security_center_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with("credentials.json", + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id="octopus", + ) + + +def test_security_center_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport() + adc.assert_called_once() + + +def test_security_center_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + SecurityCenterClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + ], +) +def test_security_center_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, + ], +) +def test_security_center_transport_auth_gdch_credentials(transport_class): + host = 'https://language.com' + api_audience_tests = [None, 'https://language2.com'] + api_audience_expect = [host, 'https://language2.com'] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with( + e + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.SecurityCenterGrpcTransport, grpc_helpers), + (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) + ], +) +def test_security_center_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class( + quota_project_id="octopus", + scopes=["1", "2"] + ) + + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=["1", "2"], + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_grpc_transport_client_cert_source_for_mtls( + transport_class +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, + private_key=expected_key + ) + +def test_security_center_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: + transports.SecurityCenterRestTransport ( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + +def test_security_center_rest_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.AbstractOperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_no_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com' + ) + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_with_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:8000' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com:8000' + ) + +@pytest.mark.parametrize("transport_name", [ + "rest", +]) +def test_security_center_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = SecurityCenterClient( + credentials=creds1, + transport=transport_name, + ) + client2 = SecurityCenterClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.bulk_mute_findings._session + session2 = client2.transport.bulk_mute_findings._session + assert session1 != session2 + session1 = client1.transport.create_security_health_analytics_custom_module._session + session2 = client2.transport.create_security_health_analytics_custom_module._session + assert session1 != session2 + session1 = client1.transport.create_source._session + session2 = client2.transport.create_source._session + assert session1 != session2 + session1 = client1.transport.create_finding._session + session2 = client2.transport.create_finding._session + assert session1 != session2 + session1 = client1.transport.create_mute_config._session + session2 = client2.transport.create_mute_config._session + assert session1 != session2 + session1 = client1.transport.create_notification_config._session + session2 = client2.transport.create_notification_config._session + assert session1 != session2 + session1 = client1.transport.delete_mute_config._session + session2 = client2.transport.delete_mute_config._session + assert session1 != session2 + session1 = client1.transport.delete_notification_config._session + session2 = client2.transport.delete_notification_config._session + assert session1 != session2 + session1 = client1.transport.delete_security_health_analytics_custom_module._session + session2 = client2.transport.delete_security_health_analytics_custom_module._session + assert session1 != session2 + session1 = client1.transport.get_big_query_export._session + session2 = client2.transport.get_big_query_export._session + assert session1 != session2 + session1 = client1.transport.get_iam_policy._session + session2 = client2.transport.get_iam_policy._session + assert session1 != session2 + session1 = client1.transport.get_mute_config._session + session2 = client2.transport.get_mute_config._session + assert session1 != session2 + session1 = client1.transport.get_notification_config._session + session2 = client2.transport.get_notification_config._session + assert session1 != session2 + session1 = client1.transport.get_organization_settings._session + session2 = client2.transport.get_organization_settings._session + assert session1 != session2 + session1 = client1.transport.get_effective_security_health_analytics_custom_module._session + session2 = client2.transport.get_effective_security_health_analytics_custom_module._session + assert session1 != session2 + session1 = client1.transport.get_security_health_analytics_custom_module._session + session2 = client2.transport.get_security_health_analytics_custom_module._session + assert session1 != session2 + session1 = client1.transport.get_source._session + session2 = client2.transport.get_source._session + assert session1 != session2 + session1 = client1.transport.group_assets._session + session2 = client2.transport.group_assets._session + assert session1 != session2 + session1 = client1.transport.group_findings._session + session2 = client2.transport.group_findings._session + assert session1 != session2 + session1 = client1.transport.list_assets._session + session2 = client2.transport.list_assets._session + assert session1 != session2 + session1 = client1.transport.list_descendant_security_health_analytics_custom_modules._session + session2 = client2.transport.list_descendant_security_health_analytics_custom_modules._session + assert session1 != session2 + session1 = client1.transport.list_findings._session + session2 = client2.transport.list_findings._session + assert session1 != session2 + session1 = client1.transport.list_mute_configs._session + session2 = client2.transport.list_mute_configs._session + assert session1 != session2 + session1 = client1.transport.list_notification_configs._session + session2 = client2.transport.list_notification_configs._session + assert session1 != session2 + session1 = client1.transport.list_effective_security_health_analytics_custom_modules._session + session2 = client2.transport.list_effective_security_health_analytics_custom_modules._session + assert session1 != session2 + session1 = client1.transport.list_security_health_analytics_custom_modules._session + session2 = client2.transport.list_security_health_analytics_custom_modules._session + assert session1 != session2 + session1 = client1.transport.list_sources._session + session2 = client2.transport.list_sources._session + assert session1 != session2 + session1 = client1.transport.run_asset_discovery._session + session2 = client2.transport.run_asset_discovery._session + assert session1 != session2 + session1 = client1.transport.set_finding_state._session + session2 = client2.transport.set_finding_state._session + assert session1 != session2 + session1 = client1.transport.set_mute._session + session2 = client2.transport.set_mute._session + assert session1 != session2 + session1 = client1.transport.set_iam_policy._session + session2 = client2.transport.set_iam_policy._session + assert session1 != session2 + session1 = client1.transport.test_iam_permissions._session + session2 = client2.transport.test_iam_permissions._session + assert session1 != session2 + session1 = client1.transport.update_external_system._session + session2 = client2.transport.update_external_system._session + assert session1 != session2 + session1 = client1.transport.update_finding._session + session2 = client2.transport.update_finding._session + assert session1 != session2 + session1 = client1.transport.update_mute_config._session + session2 = client2.transport.update_mute_config._session + assert session1 != session2 + session1 = client1.transport.update_notification_config._session + session2 = client2.transport.update_notification_config._session + assert session1 != session2 + session1 = client1.transport.update_organization_settings._session + session2 = client2.transport.update_organization_settings._session + assert session1 != session2 + session1 = client1.transport.update_security_health_analytics_custom_module._session + session2 = client2.transport.update_security_health_analytics_custom_module._session + assert session1 != session2 + session1 = client1.transport.update_source._session + session2 = client2.transport.update_source._session + assert session1 != session2 + session1 = client1.transport.update_security_marks._session + session2 = client2.transport.update_security_marks._session + assert session1 != session2 + session1 = client1.transport.create_big_query_export._session + session2 = client2.transport.create_big_query_export._session + assert session1 != session2 + session1 = client1.transport.delete_big_query_export._session + session2 = client2.transport.delete_big_query_export._session + assert session1 != session2 + session1 = client1.transport.update_big_query_export._session + session2 = client2.transport.update_big_query_export._session + assert session1 != session2 + session1 = client1.transport.list_big_query_exports._session + session2 = client2.transport.list_big_query_exports._session + assert session1 != session2 +def test_security_center_grpc_transport_channel(): + channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_security_center_grpc_asyncio_transport_channel(): + channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_client_cert_source( + transport_class +): + with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_adc( + transport_class +): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_security_center_grpc_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_security_center_grpc_lro_async_client(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc_asyncio', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_asset_path(): + organization = "squid" + asset = "clam" + expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.asset_path(organization, asset) + assert expected == actual + + +def test_parse_asset_path(): + expected = { + "organization": "whelk", + "asset": "octopus", + } + path = SecurityCenterClient.asset_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_asset_path(path) + assert expected == actual + +def test_big_query_export_path(): + organization = "oyster" + export = "nudibranch" + expected = "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) + actual = SecurityCenterClient.big_query_export_path(organization, export) + assert expected == actual + + +def test_parse_big_query_export_path(): + expected = { + "organization": "cuttlefish", + "export": "mussel", + } + path = SecurityCenterClient.big_query_export_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_big_query_export_path(path) + assert expected == actual + +def test_effective_security_health_analytics_custom_module_path(): + organization = "winkle" + effective_custom_module = "nautilus" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) + actual = SecurityCenterClient.effective_security_health_analytics_custom_module_path(organization, effective_custom_module) + assert expected == actual + + +def test_parse_effective_security_health_analytics_custom_module_path(): + expected = { + "organization": "scallop", + "effective_custom_module": "abalone", + } + path = SecurityCenterClient.effective_security_health_analytics_custom_module_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path(path) + assert expected == actual + +def test_external_system_path(): + organization = "squid" + source = "clam" + finding = "whelk" + externalsystem = "octopus" + expected = "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) + actual = SecurityCenterClient.external_system_path(organization, source, finding, externalsystem) + assert expected == actual + + +def test_parse_external_system_path(): + expected = { + "organization": "oyster", + "source": "nudibranch", + "finding": "cuttlefish", + "externalsystem": "mussel", + } + path = SecurityCenterClient.external_system_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_external_system_path(path) + assert expected == actual + +def test_finding_path(): + organization = "winkle" + source = "nautilus" + finding = "scallop" + expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + actual = SecurityCenterClient.finding_path(organization, source, finding) + assert expected == actual + + +def test_parse_finding_path(): + expected = { + "organization": "abalone", + "source": "squid", + "finding": "clam", + } + path = SecurityCenterClient.finding_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_finding_path(path) + assert expected == actual + +def test_mute_config_path(): + organization = "whelk" + mute_config = "octopus" + expected = "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) + actual = SecurityCenterClient.mute_config_path(organization, mute_config) + assert expected == actual + + +def test_parse_mute_config_path(): + expected = { + "organization": "oyster", + "mute_config": "nudibranch", + } + path = SecurityCenterClient.mute_config_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_mute_config_path(path) + assert expected == actual + +def test_notification_config_path(): + organization = "cuttlefish" + notification_config = "mussel" + expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) + actual = SecurityCenterClient.notification_config_path(organization, notification_config) + assert expected == actual + + +def test_parse_notification_config_path(): + expected = { + "organization": "winkle", + "notification_config": "nautilus", + } + path = SecurityCenterClient.notification_config_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_notification_config_path(path) + assert expected == actual + +def test_organization_settings_path(): + organization = "scallop" + expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) + actual = SecurityCenterClient.organization_settings_path(organization) + assert expected == actual + + +def test_parse_organization_settings_path(): + expected = { + "organization": "abalone", + } + path = SecurityCenterClient.organization_settings_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_organization_settings_path(path) + assert expected == actual + +def test_security_health_analytics_custom_module_path(): + organization = "squid" + custom_module = "clam" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) + actual = SecurityCenterClient.security_health_analytics_custom_module_path(organization, custom_module) + assert expected == actual + + +def test_parse_security_health_analytics_custom_module_path(): + expected = { + "organization": "whelk", + "custom_module": "octopus", + } + path = SecurityCenterClient.security_health_analytics_custom_module_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_health_analytics_custom_module_path(path) + assert expected == actual + +def test_security_marks_path(): + organization = "oyster" + asset = "nudibranch" + expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.security_marks_path(organization, asset) + assert expected == actual + + +def test_parse_security_marks_path(): + expected = { + "organization": "cuttlefish", + "asset": "mussel", + } + path = SecurityCenterClient.security_marks_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_marks_path(path) + assert expected == actual + +def test_source_path(): + organization = "winkle" + source = "nautilus" + expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + actual = SecurityCenterClient.source_path(organization, source) + assert expected == actual + + +def test_parse_source_path(): + expected = { + "organization": "scallop", + "source": "abalone", + } + path = SecurityCenterClient.source_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_source_path(path) + assert expected == actual + +def test_topic_path(): + project = "squid" + topic = "clam" + expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) + actual = SecurityCenterClient.topic_path(project, topic) + assert expected == actual + + +def test_parse_topic_path(): + expected = { + "project": "whelk", + "topic": "octopus", + } + path = SecurityCenterClient.topic_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_topic_path(path) + assert expected == actual + +def test_common_billing_account_path(): + billing_account = "oyster" + expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + actual = SecurityCenterClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "nudibranch", + } + path = SecurityCenterClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_billing_account_path(path) + assert expected == actual + +def test_common_folder_path(): + folder = "cuttlefish" + expected = "folders/{folder}".format(folder=folder, ) + actual = SecurityCenterClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "mussel", + } + path = SecurityCenterClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_folder_path(path) + assert expected == actual + +def test_common_organization_path(): + organization = "winkle" + expected = "organizations/{organization}".format(organization=organization, ) + actual = SecurityCenterClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nautilus", + } + path = SecurityCenterClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_organization_path(path) + assert expected == actual + +def test_common_project_path(): + project = "scallop" + expected = "projects/{project}".format(project=project, ) + actual = SecurityCenterClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "abalone", + } + path = SecurityCenterClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_project_path(path) + assert expected == actual + +def test_common_location_path(): + project = "squid" + location = "clam" + expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) + actual = SecurityCenterClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "whelk", + "location": "octopus", + } + path = SecurityCenterClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + transport_class = SecurityCenterClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_cancel_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.CancelOperationRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + request = request_type() + request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.cancel_operation(request) + +@pytest.mark.parametrize("request_type", [ + operations_pb2.CancelOperationRequest, + dict, +]) +def test_cancel_operation_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request_init = {'name': 'organizations/sample1/operations/sample2'} + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '{}' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.cancel_operation(request) + + # Establish that the response is the type that we expect. + assert response is None + +def test_delete_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.DeleteOperationRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + request = request_type() + request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_operation(request) + +@pytest.mark.parametrize("request_type", [ + operations_pb2.DeleteOperationRequest, + dict, +]) +def test_delete_operation_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request_init = {'name': 'organizations/sample1/operations/sample2'} + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '{}' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_operation(request) + + # Establish that the response is the type that we expect. + assert response is None + +def test_get_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.GetOperationRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + request = request_type() + request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_operation(request) + +@pytest.mark.parametrize("request_type", [ + operations_pb2.GetOperationRequest, + dict, +]) +def test_get_operation_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request_init = {'name': 'organizations/sample1/operations/sample2'} + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_operation(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.Operation) + +def test_list_operations_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.ListOperationsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + request = request_type() + request = json_format.ParseDict({'name': 'organizations/sample1/operations'}, request) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_operations(request) + +@pytest.mark.parametrize("request_type", [ + operations_pb2.ListOperationsRequest, + dict, +]) +def test_list_operations_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request_init = {'name': 'organizations/sample1/operations'} + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.ListOperationsResponse() + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_operations(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.ListOperationsResponse) + + +def test_delete_operation(transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.DeleteOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert response is None +@pytest.mark.asyncio +async def test_delete_operation_async(transport: str = "grpc"): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.DeleteOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + response = await client.delete_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert response is None + +def test_delete_operation_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.DeleteOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + call.return_value = None + + client.delete_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] +@pytest.mark.asyncio +async def test_delete_operation_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.DeleteOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + await client.delete_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] + +def test_delete_operation_from_dict(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = None + + response = client.delete_operation( + request={ + "name": "locations", + } + ) + call.assert_called() +@pytest.mark.asyncio +async def test_delete_operation_from_dict_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + response = await client.delete_operation( + request={ + "name": "locations", + } + ) + call.assert_called() + + +def test_cancel_operation(transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.CancelOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.cancel_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert response is None +@pytest.mark.asyncio +async def test_cancel_operation_async(transport: str = "grpc"): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.CancelOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + response = await client.cancel_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert response is None + +def test_cancel_operation_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.CancelOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + call.return_value = None + + client.cancel_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] +@pytest.mark.asyncio +async def test_cancel_operation_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.CancelOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + await client.cancel_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] + +def test_cancel_operation_from_dict(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = None + + response = client.cancel_operation( + request={ + "name": "locations", + } + ) + call.assert_called() +@pytest.mark.asyncio +async def test_cancel_operation_from_dict_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + None + ) + response = await client.cancel_operation( + request={ + "name": "locations", + } + ) + call.assert_called() + + +def test_get_operation(transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.GetOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation() + response = client.get_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.Operation) +@pytest.mark.asyncio +async def test_get_operation_async(transport: str = "grpc"): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.GetOperationRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation() + ) + response = await client.get_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.Operation) + +def test_get_operation_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.GetOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + call.return_value = operations_pb2.Operation() + + client.get_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] +@pytest.mark.asyncio +async def test_get_operation_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.GetOperationRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation() + ) + await client.get_operation(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] + +def test_get_operation_from_dict(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation() + + response = client.get_operation( + request={ + "name": "locations", + } + ) + call.assert_called() +@pytest.mark.asyncio +async def test_get_operation_from_dict_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.get_operation), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation() + ) + response = await client.get_operation( + request={ + "name": "locations", + } + ) + call.assert_called() + + +def test_list_operations(transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.ListOperationsRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.ListOperationsResponse() + response = client.list_operations(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.ListOperationsResponse) +@pytest.mark.asyncio +async def test_list_operations_async(transport: str = "grpc"): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = operations_pb2.ListOperationsRequest() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.ListOperationsResponse() + ) + response = await client.list_operations(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the response is the type that we expect. + assert isinstance(response, operations_pb2.ListOperationsResponse) + +def test_list_operations_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.ListOperationsRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + call.return_value = operations_pb2.ListOperationsResponse() + + client.list_operations(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] +@pytest.mark.asyncio +async def test_list_operations_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = operations_pb2.ListOperationsRequest() + request.name = "locations" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.ListOperationsResponse() + ) + await client.list_operations(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ("x-goog-request-params", "name=locations",) in kw["metadata"] + +def test_list_operations_from_dict(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.ListOperationsResponse() + + response = client.list_operations( + request={ + "name": "locations", + } + ) + call.assert_called() +@pytest.mark.asyncio +async def test_list_operations_from_dict_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.list_operations), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.ListOperationsResponse() + ) + response = await client.list_operations( + request={ + "name": "locations", + } + ) + call.assert_called() + + +def test_transport_close(): + transports = { + "rest": "_session", + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: + with client: + close.assert_not_called() + close.assert_called_once() + +def test_client_ctx(): + transports = [ + 'rest', + 'grpc', + ] + for transport in transports: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + +@pytest.mark.parametrize("client_class,transport_class", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), +]) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/owl-bot-staging/v1beta1/.coveragerc b/owl-bot-staging/v1beta1/.coveragerc new file mode 100644 index 00000000..45cb273f --- /dev/null +++ b/owl-bot-staging/v1beta1/.coveragerc @@ -0,0 +1,13 @@ +[run] +branch = True + +[report] +show_missing = True +omit = + google/cloud/securitycenter/__init__.py + google/cloud/securitycenter/gapic_version.py +exclude_lines = + # Re-enable the standard pragma + pragma: NO COVER + # Ignore debug-only repr + def __repr__ diff --git a/owl-bot-staging/v1beta1/.flake8 b/owl-bot-staging/v1beta1/.flake8 new file mode 100644 index 00000000..29227d4c --- /dev/null +++ b/owl-bot-staging/v1beta1/.flake8 @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + +# Generated by synthtool. DO NOT EDIT! +[flake8] +ignore = E203, E266, E501, W503 +exclude = + # Exclude generated code. + **/proto/** + **/gapic/** + **/services/** + **/types/** + *_pb2.py + + # Standard linting exemptions. + **/.nox/** + __pycache__, + .git, + *.pyc, + conf.py diff --git a/owl-bot-staging/v1beta1/MANIFEST.in b/owl-bot-staging/v1beta1/MANIFEST.in new file mode 100644 index 00000000..328e3b89 --- /dev/null +++ b/owl-bot-staging/v1beta1/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include google/cloud/securitycenter *.py +recursive-include google/cloud/securitycenter_v1beta1 *.py diff --git a/owl-bot-staging/v1beta1/README.rst b/owl-bot-staging/v1beta1/README.rst new file mode 100644 index 00000000..f8c63f4c --- /dev/null +++ b/owl-bot-staging/v1beta1/README.rst @@ -0,0 +1,49 @@ +Python Client for Google Cloud Securitycenter API +================================================= + +Quick Start +----------- + +In order to use this library, you first need to go through the following steps: + +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. Enable the Google Cloud Securitycenter API. +4. `Setup Authentication.`_ + +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html + +Installation +~~~~~~~~~~~~ + +Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to +create isolated Python environments. The basic problem it addresses is one of +dependencies and versions, and indirectly permissions. + +With `virtualenv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. + +.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ + + +Mac/Linux +^^^^^^^^^ + +.. code-block:: console + + python3 -m venv + source /bin/activate + /bin/pip install /path/to/library + + +Windows +^^^^^^^ + +.. code-block:: console + + python3 -m venv + \Scripts\activate + \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1beta1/docs/conf.py b/owl-bot-staging/v1beta1/docs/conf.py new file mode 100644 index 00000000..488728ba --- /dev/null +++ b/owl-bot-staging/v1beta1/docs/conf.py @@ -0,0 +1,376 @@ +# -*- 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. +# +# +# google-cloud-securitycenter documentation build configuration file +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath("..")) + +__version__ = "0.1.0" + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +needs_sphinx = "4.0.1" + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.intersphinx", + "sphinx.ext.coverage", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", +] + +# autodoc/autosummary flags +autoclass_content = "both" +autodoc_default_flags = ["members"] +autosummary_generate = True + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Allow markdown includes (so releases.md can include CHANGLEOG.md) +# http://www.sphinx-doc.org/en/master/markdown.html +source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +source_suffix = [".rst", ".md"] + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The root toctree document. +root_doc = "index" + +# General information about the project. +project = u"google-cloud-securitycenter" +copyright = u"2022, Google, LLC" +author = u"Google APIs" # TODO: autogenerate this bit + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +release = __version__ +# The short X.Y version. +version = ".".join(release.split(".")[0:2]) + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ["_build"] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "alabaster" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + "description": "Google Cloud Client Libraries for Python", + "github_user": "googleapis", + "github_repo": "google-cloud-python", + "github_banner": True, + "font_family": "'Roboto', Georgia, sans", + "head_font_family": "'Roboto', Georgia, serif", + "code_font_family": "'Roboto Mono', 'Consolas', monospace", +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = "google-cloud-securitycenter-doc" + +# -- Options for warnings ------------------------------------------------------ + + +suppress_warnings = [ + # Temporarily suppress this to avoid "more than one target found for + # cross-reference" warning, which are intractable for us to avoid while in + # a mono-repo. + # See https://github.com/sphinx-doc/sphinx/blob + # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 + "ref.python" +] + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # 'preamble': '', + # Latex figure (float) alignment + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + root_doc, + "google-cloud-securitycenter.tex", + u"google-cloud-securitycenter Documentation", + author, + "manual", + ) +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + root_doc, + "google-cloud-securitycenter", + u"Google Cloud Securitycenter Documentation", + [author], + 1, + ) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + root_doc, + "google-cloud-securitycenter", + u"google-cloud-securitycenter Documentation", + author, + "google-cloud-securitycenter", + "GAPIC library for Google Cloud Securitycenter API", + "APIs", + ) +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + "python": ("http://python.readthedocs.org/en/latest/", None), + "gax": ("https://gax-python.readthedocs.org/en/latest/", None), + "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), + "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), + "grpc": ("https://grpc.io/grpc/python/", None), + "requests": ("http://requests.kennethreitz.org/en/stable/", None), + "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), + "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), +} + + +# Napoleon settings +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = True +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True diff --git a/owl-bot-staging/v1beta1/docs/index.rst b/owl-bot-staging/v1beta1/docs/index.rst new file mode 100644 index 00000000..88360626 --- /dev/null +++ b/owl-bot-staging/v1beta1/docs/index.rst @@ -0,0 +1,7 @@ +API Reference +------------- +.. toctree:: + :maxdepth: 2 + + securitycenter_v1beta1/services + securitycenter_v1beta1/types diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst new file mode 100644 index 00000000..304849ec --- /dev/null +++ b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst @@ -0,0 +1,10 @@ +SecurityCenter +-------------------------------- + +.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center + :members: + :inherited-members: + +.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center.pagers + :members: + :inherited-members: diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst new file mode 100644 index 00000000..a09a4b86 --- /dev/null +++ b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst @@ -0,0 +1,6 @@ +Services for Google Cloud Securitycenter v1beta1 API +==================================================== +.. toctree:: + :maxdepth: 2 + + security_center diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst new file mode 100644 index 00000000..0bbeba06 --- /dev/null +++ b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst @@ -0,0 +1,6 @@ +Types for Google Cloud Securitycenter v1beta1 API +================================================= + +.. automodule:: google.cloud.securitycenter_v1beta1.types + :members: + :show-inheritance: diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py new file mode 100644 index 00000000..51dcecf3 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py @@ -0,0 +1,81 @@ +# -*- 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. +# +from google.cloud.securitycenter import gapic_version as package_version + +__version__ = package_version.__version__ + + +from google.cloud.securitycenter_v1beta1.services.security_center.client import SecurityCenterClient +from google.cloud.securitycenter_v1beta1.services.security_center.async_client import SecurityCenterAsyncClient + +from google.cloud.securitycenter_v1beta1.types.asset import Asset +from google.cloud.securitycenter_v1beta1.types.finding import Finding +from google.cloud.securitycenter_v1beta1.types.organization_settings import OrganizationSettings +from google.cloud.securitycenter_v1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse +from google.cloud.securitycenter_v1beta1.types.security_marks import SecurityMarks +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateFindingRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateSourceRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetOrganizationSettingsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetSourceRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsResponse +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsResponse +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupResult +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsResponse +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsResponse +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesResponse +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import RunAssetDiscoveryRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import SetFindingStateRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateFindingRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSecurityMarksRequest +from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSourceRequest +from google.cloud.securitycenter_v1beta1.types.source import Source + +__all__ = ('SecurityCenterClient', + 'SecurityCenterAsyncClient', + 'Asset', + 'Finding', + 'OrganizationSettings', + 'RunAssetDiscoveryResponse', + 'SecurityMarks', + 'CreateFindingRequest', + 'CreateSourceRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'UpdateFindingRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py new file mode 100644 index 00000000..e12212ee --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py @@ -0,0 +1,82 @@ +# -*- 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. +# +from google.cloud.securitycenter_v1beta1 import gapic_version as package_version + +__version__ = package_version.__version__ + + +from .services.security_center import SecurityCenterClient +from .services.security_center import SecurityCenterAsyncClient + +from .types.asset import Asset +from .types.finding import Finding +from .types.organization_settings import OrganizationSettings +from .types.run_asset_discovery_response import RunAssetDiscoveryResponse +from .types.security_marks import SecurityMarks +from .types.securitycenter_service import CreateFindingRequest +from .types.securitycenter_service import CreateSourceRequest +from .types.securitycenter_service import GetOrganizationSettingsRequest +from .types.securitycenter_service import GetSourceRequest +from .types.securitycenter_service import GroupAssetsRequest +from .types.securitycenter_service import GroupAssetsResponse +from .types.securitycenter_service import GroupFindingsRequest +from .types.securitycenter_service import GroupFindingsResponse +from .types.securitycenter_service import GroupResult +from .types.securitycenter_service import ListAssetsRequest +from .types.securitycenter_service import ListAssetsResponse +from .types.securitycenter_service import ListFindingsRequest +from .types.securitycenter_service import ListFindingsResponse +from .types.securitycenter_service import ListSourcesRequest +from .types.securitycenter_service import ListSourcesResponse +from .types.securitycenter_service import RunAssetDiscoveryRequest +from .types.securitycenter_service import SetFindingStateRequest +from .types.securitycenter_service import UpdateFindingRequest +from .types.securitycenter_service import UpdateOrganizationSettingsRequest +from .types.securitycenter_service import UpdateSecurityMarksRequest +from .types.securitycenter_service import UpdateSourceRequest +from .types.source import Source + +__all__ = ( + 'SecurityCenterAsyncClient', +'Asset', +'CreateFindingRequest', +'CreateSourceRequest', +'Finding', +'GetOrganizationSettingsRequest', +'GetSourceRequest', +'GroupAssetsRequest', +'GroupAssetsResponse', +'GroupFindingsRequest', +'GroupFindingsResponse', +'GroupResult', +'ListAssetsRequest', +'ListAssetsResponse', +'ListFindingsRequest', +'ListFindingsResponse', +'ListSourcesRequest', +'ListSourcesResponse', +'OrganizationSettings', +'RunAssetDiscoveryRequest', +'RunAssetDiscoveryResponse', +'SecurityCenterClient', +'SecurityMarks', +'SetFindingStateRequest', +'Source', +'UpdateFindingRequest', +'UpdateOrganizationSettingsRequest', +'UpdateSecurityMarksRequest', +'UpdateSourceRequest', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json new file mode 100644 index 00000000..afd9dcb0 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json @@ -0,0 +1,298 @@ + { + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "python", + "libraryPackage": "google.cloud.securitycenter_v1beta1", + "protoPackage": "google.cloud.securitycenter.v1beta1", + "schema": "1.0", + "services": { + "SecurityCenter": { + "clients": { + "grpc": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "grpc-async": { + "libraryClient": "SecurityCenterAsyncClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "rest": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + } + } + } + } +} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py new file mode 100644 index 00000000..e8e1c384 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py @@ -0,0 +1,15 @@ +# -*- 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. +# diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py new file mode 100644 index 00000000..4712915a --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .client import SecurityCenterClient +from .async_client import SecurityCenterAsyncClient + +__all__ = ( + 'SecurityCenterClient', + 'SecurityCenterAsyncClient', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py new file mode 100644 index 00000000..ec8dc818 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py @@ -0,0 +1,2406 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union + +from google.cloud.securitycenter_v1beta1 import gapic_version as package_version + +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .client import SecurityCenterClient + + +class SecurityCenterAsyncClient: + """V1 Beta APIs for Security Center service.""" + + _client: SecurityCenterClient + + DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT + + asset_path = staticmethod(SecurityCenterClient.asset_path) + parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) + finding_path = staticmethod(SecurityCenterClient.finding_path) + parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) + organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) + parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) + security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) + parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) + source_path = staticmethod(SecurityCenterClient.source_path) + parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) + common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) + parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) + common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) + parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) + common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) + parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) + common_project_path = staticmethod(SecurityCenterClient.common_project_path) + parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) + common_location_path = staticmethod(SecurityCenterClient.common_location_path) + parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = SecurityCenterClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + + ) + + async def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_create_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]]): + The request object. Request message for creating a + source. + parent (:class:`str`): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_create_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]]): + The request object. Request message for creating a + finding. + parent (:class:`str`): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + It must be alphanumeric and less than or + equal to 32 characters and greater than + 0 characters in length. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): + The request object. Request message for ``GetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]]): + The request object. Request message for getting + organization settings. + name (:class:`str`): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_get_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]]): + The request object. Request message for getting a source. + name (:class:`str`): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsAsyncPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_group_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsAsyncPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_group_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]]): + The request object. Request message for grouping by + findings. + parent (:class:`str`): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]". + To groupBy across all sources provide a source_id of + ``-``. For example: + organizations/{organization_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (:class:`str`): + Required. Expression that defines what assets fields to + use for grouping (including ``state``). The string value + should follow SQL syntax: comma separated list of + fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GroupFindingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsAsyncPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_list_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsAsyncPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_list_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesAsyncPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_list_sources(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]]): + The request object. Request message for listing sources. + parent (:class:`str`): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListSourcesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListSourcesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]]): + The request object. Request message for running asset + discovery for an organization. + parent (:class:`str`): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.RunAssetDiscoveryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.run_asset_discovery, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + empty_pb2.Empty, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + async def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]]): + The request object. Request message for updating a + finding's state. + name (:class:`str`): + Required. The relative resource name of the finding. + See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (:class:`google.cloud.securitycenter_v1beta1.types.Finding.State`): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.SetFindingStateRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_finding_state, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): + The request object. Request message for ``SetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_iam_policy, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): + The request object. Request message for ``TestIamPermissions`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (:class:`MutableSequence[str]`): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_update_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]]): + The request object. Request message for updating or + creating a finding. + finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]]): + The request object. Request message for updating an + organization's settings. + organization_settings (:class:`google.cloud.securitycenter_v1beta1.types.OrganizationSettings`): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_organization_settings, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_update_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]]): + The request object. Request message for updating a + source. + source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (:class:`google.cloud.securitycenter_v1beta1.types.SecurityMarks`): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSecurityMarksRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_marks, + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterAsyncClient", +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py new file mode 100644 index 00000000..f2b32f05 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py @@ -0,0 +1,2585 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast + +from google.cloud.securitycenter_v1beta1 import gapic_version as package_version + +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import SecurityCenterGrpcTransport +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .transports.rest import SecurityCenterRestTransport + + +class SecurityCenterClientMeta(type): + """Metaclass for the SecurityCenter client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] + _transport_registry["grpc"] = SecurityCenterGrpcTransport + _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport + _transport_registry["rest"] = SecurityCenterRestTransport + + def get_transport_class(cls, + label: Optional[str] = None, + ) -> Type[SecurityCenterTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class SecurityCenterClient(metaclass=SecurityCenterClientMeta): + """V1 Beta APIs for Security Center service.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "securitycenter.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file( + filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def asset_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified asset string.""" + return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_asset_path(path: str) -> Dict[str,str]: + """Parses a asset path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def finding_path(organization: str,source: str,finding: str,) -> str: + """Returns a fully-qualified finding string.""" + return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + + @staticmethod + def parse_finding_path(path: str) -> Dict[str,str]: + """Parses a finding path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def organization_settings_path(organization: str,) -> str: + """Returns a fully-qualified organization_settings string.""" + return "organizations/{organization}/organizationSettings".format(organization=organization, ) + + @staticmethod + def parse_organization_settings_path(path: str) -> Dict[str,str]: + """Parses a organization_settings path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) + return m.groupdict() if m else {} + + @staticmethod + def security_marks_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified security_marks string.""" + return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_security_marks_path(path: str) -> Dict[str,str]: + """Parses a security_marks path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) + return m.groupdict() if m else {} + + @staticmethod + def source_path(organization: str,source: str,) -> str: + """Returns a fully-qualified source string.""" + return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + + @staticmethod + def parse_source_path(path: str) -> Dict[str,str]: + """Parses a source path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path(billing_account: str, ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str,str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str, ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder, ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str,str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str, ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization, ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str,str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str, ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format(project=project, ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str,str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str, ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format(project=project, location=location, ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str,str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, SecurityCenterTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError("client_options.api_key and credentials are mutually exclusive") + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, SecurityCenterTransport): + # transport is a SecurityCenterTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError("When providing a transport instance, " + "provide its credentials directly.") + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): + credentials = google.auth._default.get_api_key_credentials(api_key_value) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_create_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]): + The request object. Request message for creating a + source. + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (google.cloud.securitycenter_v1beta1.types.Source): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateSourceRequest): + request = securitycenter_service.CreateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_create_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]): + The request object. Request message for creating a + finding. + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (str): + Required. Unique identifier provided + by the client within the parent scope. + It must be alphanumeric and less than or + equal to 32 characters and greater than + 0 characters in length. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (google.cloud.securitycenter_v1beta1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateFindingRequest): + request = securitycenter_service.CreateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): + The request object. Request message for ``GetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.GetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]): + The request object. Request message for getting + organization settings. + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): + request = securitycenter_service.GetOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_get_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]): + The request object. Request message for getting a source. + name (str): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSourceRequest): + request = securitycenter_service.GetSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_group_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupAssetsRequest): + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_group_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]): + The request object. Request message for grouping by + findings. + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]". + To groupBy across all sources provide a source_id of + ``-``. For example: + organizations/{organization_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (str): + Required. Expression that defines what assets fields to + use for grouping (including ``state``). The string value + should follow SQL syntax: comma separated list of + fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupFindingsRequest): + request = securitycenter_service.GroupFindingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_list_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListAssetsRequest): + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_list_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListFindingsRequest): + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_list_sources(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]): + The request object. Request message for listing sources. + parent (str): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListSourcesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListSourcesRequest): + request = securitycenter_service.ListSourcesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_sources] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListSourcesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]): + The request object. Request message for running asset + discovery for an organization. + parent (str): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated + empty messages in your APIs. A typical example is to + use it as the request or the response type of an API + method. For instance: + + service Foo { + rpc Bar(google.protobuf.Empty) returns + (google.protobuf.Empty); + + } + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.RunAssetDiscoveryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): + request = securitycenter_service.RunAssetDiscoveryRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + empty_pb2.Empty, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_set_finding_state(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]): + The request object. Request message for updating a + finding's state. + name (str): + Required. The relative resource name of the finding. + See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (google.cloud.securitycenter_v1beta1.types.Finding.State): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.SetFindingStateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.SetFindingStateRequest): + request = securitycenter_service.SetFindingStateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_finding_state] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): + The request object. Request message for ``SetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.SetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): + The request object. Request message for ``TestIamPermissions`` method. + resource (str): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (MutableSequence[str]): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.TestIamPermissionsRequest() + if resource is not None: + request.resource = resource + if permissions: + request.permissions.extend(permissions) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_update_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]): + The request object. Request message for updating or + creating a finding. + finding (google.cloud.securitycenter_v1beta1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateFindingRequest): + request = securitycenter_service.UpdateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]): + The request object. Request message for updating an + organization's settings. + organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_update_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]): + The request object. Request message for updating a + source. + source (google.cloud.securitycenter_v1beta1.types.Source): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSourceRequest): + request = securitycenter_service.UpdateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1beta1 + + def sample_update_security_marks(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1beta1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityMarksRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): + request = securitycenter_service.UpdateSecurityMarksRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_security_marks] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "SecurityCenterClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + + + + + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterClient", +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py new file mode 100644 index 00000000..75b8f79f --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py @@ -0,0 +1,625 @@ +# -*- 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. +# +from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator + +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source + + +class GroupAssetsPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupAssetsResponse], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupAssetsAsyncPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupFindingsResponse], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsAsyncPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListAssetsResponse], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + for page in self.pages: + yield from page.list_assets_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsAsyncPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + async def async_generator(): + async for page in self.pages: + for response in page.list_assets_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``findings`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``findings`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListFindingsResponse], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[finding.Finding]: + for page in self.pages: + yield from page.findings + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsAsyncPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``findings`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``findings`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[finding.Finding]: + async def async_generator(): + async for page in self.pages: + for response in page.findings: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListSourcesResponse], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[source.Source]: + for page in self.pages: + yield from page.sources + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesAsyncPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[source.Source]: + async def async_generator(): + async for page in self.pages: + for response in page.sources: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py new file mode 100644 index 00000000..be15b558 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py @@ -0,0 +1,38 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import SecurityCenterTransport +from .grpc import SecurityCenterGrpcTransport +from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .rest import SecurityCenterRestTransport +from .rest import SecurityCenterRestInterceptor + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] +_transport_registry['grpc'] = SecurityCenterGrpcTransport +_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport +_transport_registry['rest'] = SecurityCenterRestTransport + +__all__ = ( + 'SecurityCenterTransport', + 'SecurityCenterGrpcTransport', + 'SecurityCenterGrpcAsyncIOTransport', + 'SecurityCenterRestTransport', + 'SecurityCenterRestInterceptor', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py new file mode 100644 index 00000000..67f98e00 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py @@ -0,0 +1,465 @@ +# -*- 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +from google.cloud.securitycenter_v1beta1 import gapic_version as package_version + +import google.auth # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +class SecurityCenterTransport(abc.ABC): + """Abstract transport class for SecurityCenter.""" + + AUTH_SCOPES = ( + 'https://www.googleapis.com/auth/cloud-platform', + ) + + DEFAULT_HOST: str = 'securitycenter.googleapis.com' + def __init__( + self, *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + **scopes_kwargs, + quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience(api_audience if api_audience else host) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ':' not in host: + host += ':443' + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.create_source: gapic_v1.method.wrap_method( + self.create_source, + default_timeout=60.0, + client_info=client_info, + ), + self.create_finding: gapic_v1.method.wrap_method( + self.create_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.get_iam_policy: gapic_v1.method.wrap_method( + self.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_organization_settings: gapic_v1.method.wrap_method( + self.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_source: gapic_v1.method.wrap_method( + self.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.group_assets: gapic_v1.method.wrap_method( + self.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.group_findings: gapic_v1.method.wrap_method( + self.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_assets: gapic_v1.method.wrap_method( + self.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_findings: gapic_v1.method.wrap_method( + self.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_sources: gapic_v1.method.wrap_method( + self.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.run_asset_discovery: gapic_v1.method.wrap_method( + self.run_asset_discovery, + default_timeout=60.0, + client_info=client_info, + ), + self.set_finding_state: gapic_v1.method.wrap_method( + self.set_finding_state, + default_timeout=60.0, + client_info=client_info, + ), + self.set_iam_policy: gapic_v1.method.wrap_method( + self.set_iam_policy, + default_timeout=60.0, + client_info=client_info, + ), + self.test_iam_permissions: gapic_v1.method.wrap_method( + self.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.update_finding: gapic_v1.method.wrap_method( + self.update_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.update_organization_settings: gapic_v1.method.wrap_method( + self.update_organization_settings, + default_timeout=60.0, + client_info=client_info, + ), + self.update_source: gapic_v1.method.wrap_method( + self.update_source, + default_timeout=60.0, + client_info=client_info, + ), + self.update_security_marks: gapic_v1.method.wrap_method( + self.update_security_marks, + default_timeout=480.0, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Union[ + organization_settings.OrganizationSettings, + Awaitable[organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Union[ + source.Source, + Awaitable[source.Source] + ]]: + raise NotImplementedError() + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Union[ + securitycenter_service.GroupAssetsResponse, + Awaitable[securitycenter_service.GroupAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Union[ + securitycenter_service.GroupFindingsResponse, + Awaitable[securitycenter_service.GroupFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Union[ + securitycenter_service.ListAssetsResponse, + Awaitable[securitycenter_service.ListAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Union[ + securitycenter_service.ListFindingsResponse, + Awaitable[securitycenter_service.ListFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Union[ + securitycenter_service.ListSourcesResponse, + Awaitable[securitycenter_service.ListSourcesResponse] + ]]: + raise NotImplementedError() + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Union[ + operations_pb2.Operation, + Awaitable[operations_pb2.Operation] + ]]: + raise NotImplementedError() + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Union[ + finding.Finding, + Awaitable[finding.Finding] + ]]: + raise NotImplementedError() + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Union[ + iam_policy_pb2.TestIamPermissionsResponse, + Awaitable[iam_policy_pb2.TestIamPermissionsResponse] + ]]: + raise NotImplementedError() + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Union[ + gcs_organization_settings.OrganizationSettings, + Awaitable[gcs_organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Union[ + gcs_security_marks.SecurityMarks, + Awaitable[gcs_security_marks.SecurityMarks] + ]]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ( + 'SecurityCenterTransport', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py new file mode 100644 index 00000000..09e8e582 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py @@ -0,0 +1,754 @@ +# -*- 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 warnings +from typing import Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import grpc_helpers +from google.api_core import operations_v1 +from google.api_core import gapic_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore + +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO + + +class SecurityCenterGrpcTransport(SecurityCenterTransport): + """gRPC backend transport for SecurityCenter. + + V1 Beta APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + _stubs: Dict[str, Callable] + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service. + """ + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + ~.GroupAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + ~.GroupFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + ~.ListAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + ~.ListFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + ~.ListSourcesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + ~.TestIamPermissionsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + ~.SecurityMarks]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ( + 'SecurityCenterGrpcTransport', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py new file mode 100644 index 00000000..787c4fd4 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py @@ -0,0 +1,753 @@ +# -*- 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 warnings +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .grpc import SecurityCenterGrpcTransport + + +class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): + """gRPC AsyncIO backend transport for SecurityCenter. + + V1 Beta APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Awaitable[organization_settings.OrganizationSettings]]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Awaitable[source.Source]]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Awaitable[securitycenter_service.GroupAssetsResponse]]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + Awaitable[~.GroupAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Awaitable[securitycenter_service.GroupFindingsResponse]]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + Awaitable[~.GroupFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Awaitable[securitycenter_service.ListAssetsResponse]]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + Awaitable[~.ListAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Awaitable[securitycenter_service.ListFindingsResponse]]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + Awaitable[~.ListFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Awaitable[securitycenter_service.ListSourcesResponse]]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + Awaitable[~.ListSourcesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Awaitable[operations_pb2.Operation]]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Awaitable[finding.Finding]]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + Awaitable[~.TestIamPermissionsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Awaitable[gcs_organization_settings.OrganizationSettings]]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Awaitable[gcs_security_marks.SecurityMarks]]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + Awaitable[~.SecurityMarks]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ( + 'SecurityCenterGrpcAsyncIOTransport', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py new file mode 100644 index 00000000..5b741462 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py @@ -0,0 +1,2570 @@ +# -*- 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. +# + +from google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from google.api_core import operations_v1 +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore + +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class SecurityCenterRestInterceptor: + """Interceptor for SecurityCenter. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the SecurityCenterRestTransport. + + .. code-block:: python + class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): + def pre_create_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_sources(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_sources(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_run_asset_discovery(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_run_asset_discovery(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_finding_state(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_finding_state(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_test_iam_permissions(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_test_iam_permissions(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_security_marks(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_marks(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_source(self, response): + logging.log(f"Received response: {response}") + return response + + transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) + client = SecurityCenterClient(transport=transport) + + + """ + def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for create_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for create_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: + """Post-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_source(self, response: source.Source) -> source.Source: + """Post-rpc interceptor for get_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: + """Post-rpc interceptor for group_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: + """Post-rpc interceptor for group_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: + """Post-rpc interceptor for list_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: + """Post-rpc interceptor for list_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_sources + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: + """Post-rpc interceptor for list_sources + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: + """Post-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: + """Post-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: + """Post-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for update_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: + """Post-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: + """Post-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for update_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class SecurityCenterRestStub: + _session: AuthorizedSession + _host: str + _interceptor: SecurityCenterRestInterceptor + + +class SecurityCenterRestTransport(SecurityCenterTransport): + """REST backend transport for SecurityCenter. + + V1 Beta APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[ + ], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = 'https', + interceptor: Optional[SecurityCenterRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST) + self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or SecurityCenterRestInterceptor() + self._prep_wrapped_messages(client_info) + + @property + def operations_client(self) -> operations_v1.AbstractOperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Only create a new client if we do not already have one. + if self._operations_client is None: + http_options: Dict[str, List[Dict[str, str]]] = { + 'google.longrunning.Operations.CancelOperation': [ + { + 'method': 'post', + 'uri': '/v1beta1/{name=organizations/*/operations/*}:cancel', + 'body': '*', + }, + ], + 'google.longrunning.Operations.DeleteOperation': [ + { + 'method': 'delete', + 'uri': '/v1beta1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.GetOperation': [ + { + 'method': 'get', + 'uri': '/v1beta1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.ListOperations': [ + { + 'method': 'get', + 'uri': '/v1beta1/{name=organizations/*/operations}', + }, + ], + } + + rest_transport = operations_v1.OperationsRestTransport( + host=self._host, + # use the credentials which are saved + credentials=self._credentials, + scopes=self._scopes, + http_options=http_options, + path_prefix="v1beta1") + + self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) + + # Return the client from cache. + return self._operations_client + + class _CreateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "findingId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the create finding method over HTTP. + + Args: + request (~.securitycenter_service.CreateFindingRequest): + The request object. Request message for creating a + finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_create_finding(request, metadata) + pb_request = securitycenter_service.CreateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_finding(resp) + return resp + + class _CreateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the create source method over HTTP. + + Args: + request (~.securitycenter_service.CreateSourceRequest): + The request object. Request message for creating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{parent=organizations/*}/sources', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_create_source(request, metadata) + pb_request = securitycenter_service.CreateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_source(resp) + return resp + + class _GetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("GetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.GetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the get iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.GetIamPolicyRequest): + The request object. Request message for ``GetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_iam_policy(resp) + return resp + + class _GetOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("GetOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> organization_settings.OrganizationSettings: + r"""Call the get organization settings method over HTTP. + + Args: + request (~.securitycenter_service.GetOrganizationSettingsRequest): + The request object. Request message for getting + organization settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1beta1/{name=organizations/*/organizationSettings}', + }, + ] + request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) + pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = organization_settings.OrganizationSettings() + pb_resp = organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_organization_settings(resp) + return resp + + class _GetSource(SecurityCenterRestStub): + def __hash__(self): + return hash("GetSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> source.Source: + r"""Call the get source method over HTTP. + + Args: + request (~.securitycenter_service.GetSourceRequest): + The request object. Request message for getting a source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1beta1/{name=organizations/*/sources/*}', + }, + ] + request, metadata = self._interceptor.pre_get_source(request, metadata) + pb_request = securitycenter_service.GetSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = source.Source() + pb_resp = source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_source(resp) + return resp + + class _GroupAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupAssetsResponse: + r"""Call the group assets method over HTTP. + + Args: + request (~.securitycenter_service.GroupAssetsRequest): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupAssetsResponse: + Response message for grouping by + assets. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{parent=organizations/*}/assets:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_assets(request, metadata) + pb_request = securitycenter_service.GroupAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupAssetsResponse() + pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_assets(resp) + return resp + + class _GroupFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupFindingsResponse: + r"""Call the group findings method over HTTP. + + Args: + request (~.securitycenter_service.GroupFindingsRequest): + The request object. Request message for grouping by + findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupFindingsResponse: + Response message for group by + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_findings(request, metadata) + pb_request = securitycenter_service.GroupFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupFindingsResponse() + pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_findings(resp) + return resp + + class _ListAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("ListAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListAssetsResponse: + r"""Call the list assets method over HTTP. + + Args: + request (~.securitycenter_service.ListAssetsRequest): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListAssetsResponse: + Response message for listing assets. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1beta1/{parent=organizations/*}/assets', + }, + ] + request, metadata = self._interceptor.pre_list_assets(request, metadata) + pb_request = securitycenter_service.ListAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListAssetsResponse() + pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_assets(resp) + return resp + + class _ListFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("ListFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListFindingsResponse: + r"""Call the list findings method over HTTP. + + Args: + request (~.securitycenter_service.ListFindingsRequest): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListFindingsResponse: + Response message for listing + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', + }, + ] + request, metadata = self._interceptor.pre_list_findings(request, metadata) + pb_request = securitycenter_service.ListFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListFindingsResponse() + pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_findings(resp) + return resp + + class _ListSources(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSources") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListSourcesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListSourcesResponse: + r"""Call the list sources method over HTTP. + + Args: + request (~.securitycenter_service.ListSourcesRequest): + The request object. Request message for listing sources. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSourcesResponse: + Response message for listing sources. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1beta1/{parent=organizations/*}/sources', + }, + ] + request, metadata = self._interceptor.pre_list_sources(request, metadata) + pb_request = securitycenter_service.ListSourcesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListSourcesResponse() + pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_sources(resp) + return resp + + class _RunAssetDiscovery(SecurityCenterRestStub): + def __hash__(self): + return hash("RunAssetDiscovery") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.RunAssetDiscoveryRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.Operation: + r"""Call the run asset discovery method over HTTP. + + Args: + request (~.securitycenter_service.RunAssetDiscoveryRequest): + The request object. Request message for running asset + discovery for an organization. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.operations_pb2.Operation: + This resource represents a + long-running operation that is the + result of a network API call. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{parent=organizations/*}/assets:runDiscovery', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) + pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = operations_pb2.Operation() + json_format.Parse(response.content, resp, ignore_unknown_fields=True) + resp = self._interceptor.post_run_asset_discovery(resp) + return resp + + class _SetFindingState(SecurityCenterRestStub): + def __hash__(self): + return hash("SetFindingState") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.SetFindingStateRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> finding.Finding: + r"""Call the set finding state method over HTTP. + + Args: + request (~.securitycenter_service.SetFindingStateRequest): + The request object. Request message for updating a + finding's state. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{name=organizations/*/sources/*/findings/*}:setState', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_finding_state(request, metadata) + pb_request = securitycenter_service.SetFindingStateRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = finding.Finding() + pb_resp = finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_finding_state(resp) + return resp + + class _SetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("SetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.SetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the set iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.SetIamPolicyRequest): + The request object. Request message for ``SetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_iam_policy(resp) + return resp + + class _TestIamPermissions(SecurityCenterRestStub): + def __hash__(self): + return hash("TestIamPermissions") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.TestIamPermissionsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Call the test iam permissions method over HTTP. + + Args: + request (~.iam_policy_pb2.TestIamPermissionsRequest): + The request object. Request message for ``TestIamPermissions`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.iam_policy_pb2.TestIamPermissionsResponse: + Response message for ``TestIamPermissions`` method. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = iam_policy_pb2.TestIamPermissionsResponse() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_test_iam_permissions(resp) + return resp + + class _UpdateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the update finding method over HTTP. + + Args: + request (~.securitycenter_service.UpdateFindingRequest): + The request object. Request message for updating or + creating a finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1beta1/{finding.name=organizations/*/sources/*/findings/*}', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_update_finding(request, metadata) + pb_request = securitycenter_service.UpdateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_finding(resp) + return resp + + class _UpdateOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Call the update organization + settings method over HTTP. + + Args: + request (~.securitycenter_service.UpdateOrganizationSettingsRequest): + The request object. Request message for updating an + organization's settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1beta1/{organization_settings.name=organizations/*/organizationSettings}', + 'body': 'organization_settings', + }, + ] + request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) + pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_organization_settings.OrganizationSettings() + pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_organization_settings(resp) + return resp + + class _UpdateSecurityMarks(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityMarks") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSecurityMarksRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_security_marks.SecurityMarks: + r"""Call the update security marks method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityMarksRequest): + The request object. Request message for updating a + SecurityMarks resource. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_marks.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, + ] + request, metadata = self._interceptor.pre_update_security_marks(request, metadata) + pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_security_marks.SecurityMarks() + pb_resp = gcs_security_marks.SecurityMarks.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_security_marks(resp) + return resp + + class _UpdateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the update source method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSourceRequest): + The request object. Request message for updating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1beta1/{source.name=organizations/*/sources/*}', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_update_source(request, metadata) + pb_request = securitycenter_service.UpdateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_source(resp) + return resp + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSources(self._session, self._host, self._interceptor) # type: ignore + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__=( + 'SecurityCenterRestTransport', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py new file mode 100644 index 00000000..d0d3788c --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py @@ -0,0 +1,86 @@ +# -*- 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. +# +from .asset import ( + Asset, +) +from .finding import ( + Finding, +) +from .organization_settings import ( + OrganizationSettings, +) +from .run_asset_discovery_response import ( + RunAssetDiscoveryResponse, +) +from .security_marks import ( + SecurityMarks, +) +from .securitycenter_service import ( + CreateFindingRequest, + CreateSourceRequest, + GetOrganizationSettingsRequest, + GetSourceRequest, + GroupAssetsRequest, + GroupAssetsResponse, + GroupFindingsRequest, + GroupFindingsResponse, + GroupResult, + ListAssetsRequest, + ListAssetsResponse, + ListFindingsRequest, + ListFindingsResponse, + ListSourcesRequest, + ListSourcesResponse, + RunAssetDiscoveryRequest, + SetFindingStateRequest, + UpdateFindingRequest, + UpdateOrganizationSettingsRequest, + UpdateSecurityMarksRequest, + UpdateSourceRequest, +) +from .source import ( + Source, +) + +__all__ = ( + 'Asset', + 'Finding', + 'OrganizationSettings', + 'RunAssetDiscoveryResponse', + 'SecurityMarks', + 'CreateFindingRequest', + 'CreateSourceRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'UpdateFindingRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', +) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py new file mode 100644 index 00000000..a5809052 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py @@ -0,0 +1,155 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'Asset', + }, +) + + +class Asset(proto.Message): + r"""Security Command Center representation of a Google Cloud + resource. + + The Asset is a Security Command Center resource that captures + information about a single Google Cloud resource. All + modifications to an Asset are only within the context of + Security Command Center and don't affect the referenced Google + Cloud resource. + + Attributes: + name (str): + The relative resource name of this asset. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/assets/{asset_id}". + security_center_properties (google.cloud.securitycenter_v1beta1.types.Asset.SecurityCenterProperties): + Security Command Center managed properties. + These properties are managed by Security Command + Center and cannot be modified by the user. + resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Resource managed properties. These properties + are managed and defined by the Google Cloud + resource and cannot be modified by the user. + security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): + User specified security marks. These marks + are entirely managed by the user and come from + the SecurityMarks resource that belongs to the + asset. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was created in + Security Command Center. + update_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was last updated, + added, or deleted in Security Command Center. + """ + + class SecurityCenterProperties(proto.Message): + r"""Security Command Center managed properties. These properties + are managed by Security Command Center and cannot be modified by + the user. + + Attributes: + resource_name (str): + Immutable. The full resource name of the Google Cloud + resource this asset represents. This field is immutable + after create time. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_type (str): + The type of the Google Cloud resource. + Examples include: APPLICATION, PROJECT, and + ORGANIZATION. This is a case insensitive field + defined by Security Command Center and/or the + producer of the resource and is immutable after + create time. + resource_parent (str): + The full resource name of the immediate parent of the + resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_project (str): + The full resource name of the project the resource belongs + to. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_owners (MutableSequence[str]): + Owners of the Google Cloud resource. + """ + + resource_name: str = proto.Field( + proto.STRING, + number=1, + ) + resource_type: str = proto.Field( + proto.STRING, + number=2, + ) + resource_parent: str = proto.Field( + proto.STRING, + number=3, + ) + resource_project: str = proto.Field( + proto.STRING, + number=4, + ) + resource_owners: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=5, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + security_center_properties: SecurityCenterProperties = proto.Field( + proto.MESSAGE, + number=2, + message=SecurityCenterProperties, + ) + resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py new file mode 100644 index 00000000..4a146544 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py @@ -0,0 +1,164 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'Finding', + }, +) + + +class Finding(proto.Message): + r"""Security Command Center finding. + A finding is a record of assessment data (security, risk, health + or privacy) ingested into Security Command Center for + presentation, notification, analysis, policy testing, and + enforcement. For example, an XSS vulnerability in an App Engine + application is a finding. + + Attributes: + name (str): + The relative resource name of this finding. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". + parent (str): + Immutable. The relative resource name of the source the + finding belongs to. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + This field is immutable after creation time. For example: + "organizations/{organization_id}/sources/{source_id}". + resource_name (str): + For findings on Google Cloud resources, the full resource + name of the Google Cloud resource this finding is for. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + When the finding is for a non-Google Cloud resource, the + resourceName can be a customer or partner defined string. + This field is immutable after creation time. + state (google.cloud.securitycenter_v1beta1.types.Finding.State): + The state of the finding. + category (str): + The additional taxonomy group within findings from a given + source. This field is immutable after creation time. + Example: "XSS_FLASH_INJECTION". + external_uri (str): + The URI that, if available, points to a web + page outside of Security Command Center where + additional information about the finding can be + found. This field is guaranteed to be either + empty or a well formed URL. + source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Source specific properties. These properties are managed by + the source that writes the finding. The key names in the + source_properties map must be between 1 and 255 characters, + and must start with a letter and contain alphanumeric + characters or underscores only. + security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): + Output only. User specified security marks. + These marks are entirely managed by the user and + come from the SecurityMarks resource that + belongs to the finding. + event_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the event took place, or + when an update to the finding occurred. For + example, if the finding represents an open + firewall it would capture the time the detector + believes the firewall became open. The accuracy + is determined by the detector. If the finding + were to be resolved afterward, this time would + reflect when the finding was resolved. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the finding was created in + Security Command Center. + """ + class State(proto.Enum): + r"""The state of the finding. + + Values: + STATE_UNSPECIFIED (0): + Unspecified state. + ACTIVE (1): + The finding requires attention and has not + been addressed yet. + INACTIVE (2): + The finding has been fixed, triaged as a + non-issue or otherwise addressed and is no + longer active. + """ + STATE_UNSPECIFIED = 0 + ACTIVE = 1 + INACTIVE = 2 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + parent: str = proto.Field( + proto.STRING, + number=2, + ) + resource_name: str = proto.Field( + proto.STRING, + number=3, + ) + state: State = proto.Field( + proto.ENUM, + number=4, + enum=State, + ) + category: str = proto.Field( + proto.STRING, + number=5, + ) + external_uri: str = proto.Field( + proto.STRING, + number=6, + ) + source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + event_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py new file mode 100644 index 00000000..d58da929 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py @@ -0,0 +1,115 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'OrganizationSettings', + }, +) + + +class OrganizationSettings(proto.Message): + r"""User specified settings that are attached to the Security + Command Center organization. + + Attributes: + name (str): + The relative resource name of the settings. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/organizationSettings". + enable_asset_discovery (bool): + A flag that indicates if Asset Discovery should be enabled. + If the flag is set to ``true``, then discovery of assets + will occur. If it is set to \`false, all historical assets + will remain, but discovery of future assets will not occur. + asset_discovery_config (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig): + The configuration used for Asset Discovery + runs. + """ + + class AssetDiscoveryConfig(proto.Message): + r"""The configuration used for Asset Discovery runs. + + Attributes: + project_ids (MutableSequence[str]): + The project ids to use for filtering asset + discovery. + inclusion_mode (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): + The mode to use for filtering asset + discovery. + """ + class InclusionMode(proto.Enum): + r"""The mode of inclusion when running Asset Discovery. Asset discovery + can be limited by explicitly identifying projects to be included or + excluded. If INCLUDE_ONLY is set, then only those projects within + the organization and their children are discovered during asset + discovery. If EXCLUDE is set, then projects that don't match those + projects are discovered during asset discovery. If neither are set, + then all projects within the organization are discovered during + asset discovery. + + Values: + INCLUSION_MODE_UNSPECIFIED (0): + Unspecified. Setting the mode with this value + will disable inclusion/exclusion filtering for + Asset Discovery. + INCLUDE_ONLY (1): + Asset Discovery will capture only the + resources within the projects specified. All + other resources will be ignored. + EXCLUDE (2): + Asset Discovery will ignore all resources + under the projects specified. All other + resources will be retrieved. + """ + INCLUSION_MODE_UNSPECIFIED = 0 + INCLUDE_ONLY = 1 + EXCLUDE = 2 + + project_ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( + proto.ENUM, + number=2, + enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + enable_asset_discovery: bool = proto.Field( + proto.BOOL, + number=2, + ) + asset_discovery_config: AssetDiscoveryConfig = proto.Field( + proto.MESSAGE, + number=3, + message=AssetDiscoveryConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py new file mode 100644 index 00000000..6014fa5e --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py @@ -0,0 +1,76 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import duration_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'RunAssetDiscoveryResponse', + }, +) + + +class RunAssetDiscoveryResponse(proto.Message): + r"""Response of asset discovery run + + Attributes: + state (google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryResponse.State): + The state of an asset discovery run. + duration (google.protobuf.duration_pb2.Duration): + The duration between asset discovery run + start and end + """ + class State(proto.Enum): + r"""The state of an asset discovery run. + + Values: + STATE_UNSPECIFIED (0): + Asset discovery run state was unspecified. + COMPLETED (1): + Asset discovery run completed successfully. + SUPERSEDED (2): + Asset discovery run was cancelled with tasks + still pending, as another run for the same + organization was started with a higher priority. + TERMINATED (3): + Asset discovery run was killed and + terminated. + """ + STATE_UNSPECIFIED = 0 + COMPLETED = 1 + SUPERSEDED = 2 + TERMINATED = 3 + + state: State = proto.Field( + proto.ENUM, + number=1, + enum=State, + ) + duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=2, + message=duration_pb2.Duration, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py new file mode 100644 index 00000000..437c4844 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py @@ -0,0 +1,68 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'SecurityMarks', + }, +) + + +class SecurityMarks(proto.Message): + r"""User specified security marks that are attached to the parent + Security Command Center resource. Security marks are scoped + within a Security Command Center organization -- they can be + modified and viewed by all users who have proper permissions on + the organization. + + Attributes: + name (str): + The relative resource name of the SecurityMarks. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Examples: + "organizations/{organization_id}/assets/{asset_id}/securityMarks" + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". + marks (MutableMapping[str, str]): + Mutable user specified security marks belonging to the + parent resource. Constraints are as follows: + + - Keys and values are treated as case insensitive + - Keys must be between 1 - 256 characters (inclusive) + - Keys must be letters, numbers, underscores, or dashes + - Values have leading and trailing whitespace trimmed, + remaining characters must be between 1 - 4096 characters + (inclusive) + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + marks: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py new file mode 100644 index 00000000..3002ea9b --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py @@ -0,0 +1,1053 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1beta1.types import asset as gcs_asset +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'CreateFindingRequest', + 'CreateSourceRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'SetFindingStateRequest', + 'RunAssetDiscoveryRequest', + 'UpdateFindingRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSourceRequest', + 'UpdateSecurityMarksRequest', + }, +) + + +class CreateFindingRequest(proto.Message): + r"""Request message for creating a finding. + + Attributes: + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + finding_id (str): + Required. Unique identifier provided by the + client within the parent scope. It must be + alphanumeric and less than or equal to 32 + characters and greater than 0 characters in + length. + finding (google.cloud.securitycenter_v1beta1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output only + fields on this resource. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + finding_id: str = proto.Field( + proto.STRING, + number=2, + ) + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_finding.Finding, + ) + + +class CreateSourceRequest(proto.Message): + r"""Request message for creating a source. + + Attributes: + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + source (google.cloud.securitycenter_v1beta1.types.Source): + Required. The Source being created, only the display_name + and description will be used. All other fields will be + ignored. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_source.Source, + ) + + +class GetOrganizationSettingsRequest(proto.Message): + r"""Request message for getting organization settings. + + Attributes: + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSourceRequest(proto.Message): + r"""Request message for getting a source. + + Attributes: + name (str): + Required. Relative resource name of the source. Its format + is "organizations/[organization_id]/source/[source_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GroupAssetsRequest(proto.Message): + r"""Request message for grouping by assets. + + Attributes: + parent (str): + Required. Name of the organization to groupBy. Its format is + "organizations/[organization_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are not supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + For example, ``resource_properties.size = 100`` is a valid + filter string. + group_by (str): + Required. Expression that defines what assets fields to use + for grouping. The string value should follow SQL syntax: + comma separated list of fields. For example: + "security_center_properties.resource_project,security_center_properties.project". + + The following fields are supported when compare_duration is + not set: + + - security_center_properties.resource_project + - security_center_properties.resource_type + - security_center_properties.resource_parent + + The following fields are supported when compare_duration is + set: + + - security_center_properties.resource_type + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the Asset's "state" property + is updated to indicate whether the asset was added, removed, + or remained present during the compare_duration period of + time that precedes the read_time. This is the time between + (read_time - compare_duration) and read_time. + + The state value is derived based on the presence of the + asset at the two points in time. Intermediate state changes + between the two times don't affect the result. For example, + the results aren't affected if the asset is removed and + re-created again. + + Possible "state" values when compare_duration is specified: + + - "ADDED": indicates that the asset was not present before + compare_duration, but present at reference_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at + reference_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and reference_time. + + This field is ignored if ``state`` is not a field in + ``group_by``. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + page_token (str): + The value returned by the last ``GroupAssetsResponse``; + indicates that this is a continuation of a prior + ``GroupAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=4, + message=duration_pb2.Duration, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + page_token: str = proto.Field( + proto.STRING, + number=7, + ) + page_size: int = proto.Field( + proto.INT32, + number=8, + ) + + +class GroupAssetsResponse(proto.Message): + r"""Response message for grouping by assets. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class GroupFindingsRequest(proto.Message): + r"""Request message for grouping by findings. + + Attributes: + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]". To + groupBy across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are not supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + For example, ``source_properties.size = 100`` is a valid + filter string. + group_by (str): + Required. Expression that defines what assets fields to use + for grouping (including ``state``). The string value should + follow SQL syntax: comma separated list of fields. For + example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + page_token (str): + The value returned by the last ``GroupFindingsResponse``; + indicates that this is a continuation of a prior + ``GroupFindings`` call, and that the system should return + the next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + page_token: str = proto.Field( + proto.STRING, + number=5, + ) + page_size: int = proto.Field( + proto.INT32, + number=6, + ) + + +class GroupFindingsResponse(proto.Message): + r"""Response message for group by findings. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class GroupResult(proto.Message): + r"""Result containing the properties and count of a groupBy + request. + + Attributes: + properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Properties matching the groupBy fields in the + request. + count (int): + Total count of resources for the given + properties. + """ + + properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=1, + message=struct_pb2.Value, + ) + count: int = proto.Field( + proto.INT64, + number=2, + ) + + +class ListSourcesRequest(proto.Message): + r"""Request message for listing sources. + + Attributes: + parent (str): + Required. Resource name of the parent of sources to list. + Its format should be "organizations/[organization_id]". + page_token (str): + The value returned by the last ``ListSourcesResponse``; + indicates that this is a continuation of a prior + ``ListSources`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_token: str = proto.Field( + proto.STRING, + number=2, + ) + page_size: int = proto.Field( + proto.INT32, + number=7, + ) + + +class ListSourcesResponse(proto.Message): + r"""Response message for listing sources. + + Attributes: + sources (MutableSequence[google.cloud.securitycenter_v1beta1.types.Source]): + Sources belonging to the requested parent. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListAssetsRequest(proto.Message): + r"""Request message for listing assets. + + Attributes: + parent (str): + Required. Name of the organization assets should belong to. + Its format is "organizations/[organization_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are not supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + For example, ``resource_properties.size = 100`` is a valid + filter string. + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,resource_properties.a_property". + Redundant space characters in the syntax are insignificant. + "name desc,resource_properties.a_property" and " name desc , + resource_properties.a_property " are equivalent. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the ListAssetResult's "state" + attribute is updated to indicate whether the asset was + added, removed, or remained present during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state value is derived based on the presence of the + asset at the two points in time. Intermediate state changes + between the two times don't affect the result. For example, + the results aren't affected if the asset is removed and + re-created again. + + Possible "state" values when compare_duration is specified: + + - "ADDED": indicates that the asset was not present before + compare_duration, but present at read_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at read_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and read_time. + + If compare_duration is not specified, then the only possible + state is "UNUSED", which indicates that the asset is present + at read_time. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + Optional. A field mask to specify the + ListAssetsResult fields to be listed in the + response. An empty field mask will list all + fields. + page_token (str): + The value returned by the last ``ListAssetsResponse``; + indicates that this is a continuation of a prior + ``ListAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=7, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=8, + ) + page_size: int = proto.Field( + proto.INT32, + number=9, + ) + + +class ListAssetsResponse(proto.Message): + r"""Response message for listing assets. + + Attributes: + list_assets_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult]): + Assets matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of assets matching the + query. + """ + + class ListAssetsResult(proto.Message): + r"""Result containing the Asset and its State. + + Attributes: + asset (google.cloud.securitycenter_v1beta1.types.Asset): + Asset matching the search request. + state (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult.State): + State of the asset. + """ + class State(proto.Enum): + r"""State of the asset. + + When querying across two points in time this describes the change + between the two points: ADDED, REMOVED, or ACTIVE. If there was no + compare_duration supplied in the request the state should be: UNUSED + + Values: + STATE_UNSPECIFIED (0): + Unspecified state. + UNUSED (1): + Request did not specify use of this field in + the result. + ADDED (2): + Asset was added between the points in time. + REMOVED (3): + Asset was removed between the points in time. + ACTIVE (4): + Asset was active at both point(s) in time. + """ + STATE_UNSPECIFIED = 0 + UNUSED = 1 + ADDED = 2 + REMOVED = 3 + ACTIVE = 4 + + asset: gcs_asset.Asset = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_asset.Asset, + ) + state: 'ListAssetsResponse.ListAssetsResult.State' = proto.Field( + proto.ENUM, + number=2, + enum='ListAssetsResponse.ListAssetsResult.State', + ) + + @property + def raw_page(self): + return self + + list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=ListAssetsResult, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class ListFindingsRequest(proto.Message): + r"""Request message for listing findings. + + Attributes: + parent (str): + Required. Name of the source the findings belong to. Its + format is + "organizations/[organization_id]/sources/[source_id]". To + list across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are not supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + For example, ``source_properties.size = 100`` is a valid + filter string. + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,source_properties.a_property". Redundant + space characters in the syntax are insignificant. "name + desc,source_properties.a_property" and " name desc , + source_properties.a_property " are equivalent. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + Optional. A field mask to specify the Finding + fields to be listed in the response. An empty + field mask will list all fields. + page_token (str): + The value returned by the last ``ListFindingsResponse``; + indicates that this is a continuation of a prior + ``ListFindings`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=5, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=6, + ) + page_size: int = proto.Field( + proto.INT32, + number=7, + ) + + +class ListFindingsResponse(proto.Message): + r"""Response message for listing findings. + + Attributes: + findings (MutableSequence[google.cloud.securitycenter_v1beta1.types.Finding]): + Findings matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of findings matching the + query. + """ + + @property + def raw_page(self): + return self + + findings: MutableSequence[gcs_finding.Finding] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class SetFindingStateRequest(proto.Message): + r"""Request message for updating a finding's state. + + Attributes: + name (str): + Required. The relative resource name of the finding. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + state (google.cloud.securitycenter_v1beta1.types.Finding.State): + Required. The desired State of the finding. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the updated state + takes effect. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + state: gcs_finding.Finding.State = proto.Field( + proto.ENUM, + number=2, + enum=gcs_finding.Finding.State, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +class RunAssetDiscoveryRequest(proto.Message): + r"""Request message for running asset discovery for an + organization. + + Attributes: + parent (str): + Required. Name of the organization to run asset discovery + for. Its format is "organizations/[organization_id]". + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + + +class UpdateFindingRequest(proto.Message): + r"""Request message for updating or creating a finding. + + Attributes: + finding (google.cloud.securitycenter_v1beta1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the name + must alphanumeric and less than or equal to 32 characters + and greater than 0 characters in length. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + finding resource. This field should not be + specified when creating a finding. + """ + + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateOrganizationSettingsRequest(proto.Message): + r"""Request message for updating an organization's settings. + + Attributes: + organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): + Required. The organization settings resource + to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + settings resource. + """ + + organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_organization_settings.OrganizationSettings, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSourceRequest(proto.Message): + r"""Request message for updating a source. + + Attributes: + source (google.cloud.securitycenter_v1beta1.types.Source): + Required. The source resource to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the source + resource. + """ + + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSecurityMarksRequest(proto.Message): + r"""Request message for updating a SecurityMarks resource. + + Attributes: + security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): + Required. The security marks resource to + update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + security marks resource. + start_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the updated SecurityMarks + take effect. + """ + + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_marks.SecurityMarks, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py new file mode 100644 index 00000000..df1b06d0 --- /dev/null +++ b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py @@ -0,0 +1,76 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1beta1', + manifest={ + 'Source', + }, +) + + +class Source(proto.Message): + r"""Security Command Center finding source. A finding source + is an entity or a mechanism that can produce a finding. A source + is like a container of findings that come from the same scanner, + logger, monitor, etc. + + Attributes: + name (str): + The relative resource name of this source. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}". + display_name (str): + The source's display name. + A source's display name must be unique amongst + its siblings, for example, two sources with the + same parent can't share the same display name. + The display name must have a length between 1 + and 64 characters (inclusive). + description (str): + The description of the source (max of 1024 + characters). Example: + "Web Security Scanner is a web security scanner + for common vulnerabilities in App Engine + applications. It can automatically scan and + detect four common vulnerabilities, including + cross-site-scripting (XSS), Flash injection, + mixed content (HTTP in HTTPS), and + outdated/insecure libraries.". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + description: str = proto.Field( + proto.STRING, + number=3, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/mypy.ini b/owl-bot-staging/v1beta1/mypy.ini new file mode 100644 index 00000000..574c5aed --- /dev/null +++ b/owl-bot-staging/v1beta1/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +python_version = 3.7 +namespace_packages = True diff --git a/owl-bot-staging/v1beta1/noxfile.py b/owl-bot-staging/v1beta1/noxfile.py new file mode 100644 index 00000000..3a5d7759 --- /dev/null +++ b/owl-bot-staging/v1beta1/noxfile.py @@ -0,0 +1,184 @@ +# -*- 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 os +import pathlib +import shutil +import subprocess +import sys + + +import nox # type: ignore + +ALL_PYTHON = [ + "3.7", + "3.8", + "3.9", + "3.10", + "3.11", +] + +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + +LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" +PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") + +BLACK_VERSION = "black==22.3.0" +BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] +DEFAULT_PYTHON_VERSION = "3.11" + +nox.sessions = [ + "unit", + "cover", + "mypy", + "check_lower_bounds" + # exclude update_lower_bounds from default + "docs", + "blacken", + "lint", + "lint_setup_py", +] + +@nox.session(python=ALL_PYTHON) +def unit(session): + """Run the unit test suite.""" + + session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') + session.install('-e', '.') + + session.run( + 'py.test', + '--quiet', + '--cov=google/cloud/securitycenter_v1beta1/', + '--cov=tests/', + '--cov-config=.coveragerc', + '--cov-report=term', + '--cov-report=html', + os.path.join('tests', 'unit', ''.join(session.posargs)) + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def cover(session): + """Run the final coverage report. + This outputs the coverage report aggregating coverage from the unit + test runs (not system test runs), and then erases coverage data. + """ + session.install("coverage", "pytest-cov") + session.run("coverage", "report", "--show-missing", "--fail-under=100") + + session.run("coverage", "erase") + + +@nox.session(python=ALL_PYTHON) +def mypy(session): + """Run the type checker.""" + session.install( + 'mypy', + 'types-requests', + 'types-protobuf' + ) + session.install('.') + session.run( + 'mypy', + '--explicit-package-bases', + 'google', + ) + + +@nox.session +def update_lower_bounds(session): + """Update lower bounds in constraints.txt to match setup.py""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'update', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + + +@nox.session +def check_lower_bounds(session): + """Check lower bounds in setup.py are reflected in constraints file""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'check', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def docs(session): + """Build the docs for this library.""" + + session.install("-e", ".") + session.install("sphinx==4.0.1", "alabaster", "recommonmark") + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-W", # warnings as errors + "-T", # show full traceback on exception + "-N", # no colors + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint(session): + """Run linters. + + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. + """ + session.install("flake8", BLACK_VERSION) + session.run( + "black", + "--check", + *BLACK_PATHS, + ) + session.run("flake8", "google", "tests", "samples") + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def blacken(session): + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + session.run( + "black", + *BLACK_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint_setup_py(session): + """Verify that setup.py is valid (including RST check).""" + session.install("docutils", "pygments") + session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py new file mode 100644 index 00000000..16c9f9ca --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_create_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py new file mode 100644 index 00000000..5e9622dd --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_create_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py new file mode 100644 index 00000000..2e0ee1f0 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_create_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py new file mode 100644 index 00000000..3e58b73c --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_create_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py new file mode 100644 index 00000000..382ce3d5 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py new file mode 100644 index 00000000..50a057a4 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py new file mode 100644 index 00000000..82ccf1eb --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py new file mode 100644 index 00000000..d6b90e79 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py new file mode 100644 index 00000000..b46faa07 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_get_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py new file mode 100644 index 00000000..eb56d38d --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_get_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py new file mode 100644 index 00000000..e61fe1d2 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_group_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py new file mode 100644 index 00000000..91b5495d --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_group_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py new file mode 100644 index 00000000..b999ac21 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_group_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py new file mode 100644 index 00000000..ed1728b4 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_group_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py new file mode 100644 index 00000000..51c33255 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_list_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py new file mode 100644 index 00000000..7504427b --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_list_assets(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py new file mode 100644 index 00000000..26091eec --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_list_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py new file mode 100644 index 00000000..9d5b95c6 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_list_findings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py new file mode 100644 index 00000000..14530f85 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_list_sources(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py new file mode 100644 index 00000000..fcea7e74 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_list_sources(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py new file mode 100644 index 00000000..856c1087 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py new file mode 100644 index 00000000..f38b2d3a --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py new file mode 100644 index 00000000..fb598fda --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py new file mode 100644 index 00000000..f7e2f41f --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_set_finding_state(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py new file mode 100644 index 00000000..c2954da2 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py new file mode 100644 index 00000000..78e1f4ec --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py new file mode 100644 index 00000000..78f7f4e4 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py new file mode 100644 index 00000000..3de02a54 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py new file mode 100644 index 00000000..207d45ef --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_update_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py new file mode 100644 index 00000000..6372ddb2 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_update_finding(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py new file mode 100644 index 00000000..3a930b97 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py new file mode 100644 index 00000000..eaa43ba9 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py new file mode 100644 index 00000000..7ad9a249 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py new file mode 100644 index 00000000..b620d717 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_update_security_marks(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py new file mode 100644 index 00000000..b55b9c80 --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +async def sample_update_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py new file mode 100644 index 00000000..16168c1b --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1beta1 + + +def sample_update_source(): + # Create a client + client = securitycenter_v1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1beta1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json b/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json new file mode 100644 index 00000000..a4c1295e --- /dev/null +++ b/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json @@ -0,0 +1,2945 @@ +{ + "clientLibrary": { + "apis": [ + { + "id": "google.cloud.securitycenter.v1beta1", + "version": "v1beta1" + } + ], + "language": "PYTHON", + "name": "google-cloud-securitycenter", + "version": "0.1.0" + }, + "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1beta1_generated_security_center_create_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_create_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1beta1_generated_security_center_create_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_create_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1beta1_generated_security_center_create_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_create_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1beta1_generated_security_center_get_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1beta1_generated_security_center_get_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_get_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1beta1_generated_security_center_group_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_group_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1beta1_generated_security_center_group_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_group_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1beta1_generated_security_center_list_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1beta1_generated_security_center_list_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1beta1_generated_security_center_list_sources_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_sources_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1beta1_generated_security_center_update_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1beta1_generated_security_center_update_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1beta1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1beta1_generated_security_center_update_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1beta1_generated_security_center_update_source_sync.py" + } + ] +} diff --git a/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py b/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py new file mode 100644 index 00000000..7b743d2a --- /dev/null +++ b/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py @@ -0,0 +1,193 @@ +#! /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 securitycenterCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'create_finding': ('parent', 'finding_id', 'finding', ), + 'create_source': ('parent', 'source', ), + 'get_iam_policy': ('resource', 'options', ), + 'get_organization_settings': ('name', ), + 'get_source': ('name', ), + 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), + 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'page_token', 'page_size', ), + 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), + 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'field_mask', 'page_token', 'page_size', ), + 'list_sources': ('parent', 'page_token', 'page_size', ), + 'run_asset_discovery': ('parent', ), + 'set_finding_state': ('name', 'state', 'start_time', ), + 'set_iam_policy': ('resource', 'policy', 'update_mask', ), + 'test_iam_permissions': ('resource', 'permissions', ), + 'update_finding': ('finding', 'update_mask', ), + 'update_organization_settings': ('organization_settings', 'update_mask', ), + 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), + 'update_source': ('source', 'update_mask', ), + } + + 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=securitycenterCallTransformer(), +): + """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 securitycenter 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/owl-bot-staging/v1beta1/setup.py b/owl-bot-staging/v1beta1/setup.py new file mode 100644 index 00000000..f1154c41 --- /dev/null +++ b/owl-bot-staging/v1beta1/setup.py @@ -0,0 +1,91 @@ +# -*- 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 io +import os + +import setuptools # type: ignore + +package_root = os.path.abspath(os.path.dirname(__file__)) + +name = 'google-cloud-securitycenter' + + +description = "Google Cloud Securitycenter API client library" + +version = {} +with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + +dependencies = [ + "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + "proto-plus >= 1.22.0, <2.0.0dev", + "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", + "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", +] +url = "https://github.com/googleapis/python-securitycenter" + +package_root = os.path.abspath(os.path.dirname(__file__)) + +readme_filename = os.path.join(package_root, "README.rst") +with io.open(readme_filename, encoding="utf-8") as readme_file: + readme = readme_file.read() + +packages = [ + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") +] + +namespaces = ["google", "google.cloud"] + +setuptools.setup( + name=name, + version=version, + description=description, + long_description=readme, + author="Google LLC", + author_email="googleapis-packages@google.com", + license="Apache 2.0", + url=url, + classifiers=[ + release_status, + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: OS Independent", + "Topic :: Internet", + ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + namespace_packages=namespaces, + install_requires=dependencies, + include_package_data=True, + zip_safe=False, +) diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1beta1/testing/constraints-3.10.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.10.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1beta1/testing/constraints-3.11.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.11.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1beta1/testing/constraints-3.12.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.12.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1beta1/testing/constraints-3.7.txt new file mode 100644 index 00000000..2beecf99 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.7.txt @@ -0,0 +1,10 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file. +# Pin the version to the lower bound. +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.34.0 +proto-plus==1.22.0 +protobuf==3.19.5 +grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1beta1/testing/constraints-3.8.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.8.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1beta1/testing/constraints-3.9.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1beta1/testing/constraints-3.9.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/tests/__init__.py b/owl-bot-staging/v1beta1/tests/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1beta1/tests/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1beta1/tests/unit/__init__.py b/owl-bot-staging/v1beta1/tests/unit/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1beta1/tests/unit/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py new file mode 100644 index 00000000..c6200162 --- /dev/null +++ b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py @@ -0,0 +1,10951 @@ +# -*- 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 os +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import grpc +from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule +from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format + +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import future +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.api_core import operation +from google.api_core import operation_async # type: ignore +from google.api_core import operations_v1 +from google.api_core import path_template +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterAsyncClient +from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterClient +from google.cloud.securitycenter_v1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1beta1.services.security_center import transports +from google.cloud.securitycenter_v1beta1.types import finding +from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1beta1.types import organization_settings +from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1beta1.types import security_marks +from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1beta1.types import source +from google.cloud.securitycenter_v1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import options_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from google.type import expr_pb2 # type: ignore +import google.auth + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert SecurityCenterClient._get_default_mtls_endpoint(None) is None + assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_info(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +@pytest.mark.parametrize("transport_class,transport_name", [ + (transports.SecurityCenterGrpcTransport, "grpc"), + (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_file(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: + factory.return_value = creds + client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +def test_security_center_client_get_transport_class(): + transport = SecurityCenterClient.get_transport_class() + available_transports = [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterRestTransport, + ] + assert transport in available_transports + + transport = SecurityCenterClient.get_transport_class("grpc") + assert transport == transports.SecurityCenterGrpcTransport + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_client_options(client_class, transport_class, transport_name): + # Check that if channel is provided we won't create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions(api_audience="https://language.googleapis.com") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com" + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class", [ + SecurityCenterClient, SecurityCenterAsyncClient +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), +]) +def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +def test_security_center_client_client_options_from_dict(): + with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: + grpc_transport.return_value = None + client = SecurityCenterClient( + client_options={'api_endpoint': 'squid.clam.whelk'} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), +]) +def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=None, + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + response = client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_create_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + client.create_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + +@pytest.mark.asyncio +async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + )) + response = await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +@pytest.mark.asyncio +async def test_create_source_async_from_dict(): + await test_create_source_async(request_type=dict) + + +def test_create_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + + +def test_create_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + response = client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_create_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + client.create_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + +@pytest.mark.asyncio +async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + )) + response = await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +@pytest.mark.asyncio +async def test_create_finding_async_from_dict(): + await test_create_finding_async(request_type=dict) + + +def test_create_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + + +def test_create_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + client.get_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_get_iam_policy_async_from_dict(): + await test_get_iam_policy_async(request_type=dict) + + +def test_get_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_get_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.get_iam_policy(request={ + 'resource': 'resource_value', + 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), + } + ) + call.assert_called() + + +def test_get_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_get_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + client.get_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_get_organization_settings_async_from_dict(): + await test_get_organization_settings_async(request_type=dict) + + +def test_get_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = organization_settings.OrganizationSettings() + client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + response = client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_get_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + client.get_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + +@pytest.mark.asyncio +async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + )) + response = await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +@pytest.mark.asyncio +async def test_get_source_async_from_dict(): + await test_get_source_async(request_type=dict) + + +def test_get_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = source.Source() + client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + ) + response = client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_group_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + client.group_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + +@pytest.mark.asyncio +async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + )) + response = await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_group_assets_async_from_dict(): + await test_group_assets_async(request_type=dict) + + +def test_group_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = securitycenter_service.GroupAssetsResponse() + client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) + await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + ) + response = client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_group_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + client.group_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + +@pytest.mark.asyncio +async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + )) + response = await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_group_findings_async_from_dict(): + await test_group_findings_async(request_type=dict) + + +def test_group_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = securitycenter_service.GroupFindingsResponse() + client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + + +def test_group_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + +@pytest.mark.asyncio +async def test_group_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_group_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + client.list_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + +@pytest.mark.asyncio +async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_assets_async_from_dict(): + await test_list_assets_async(request_type=dict) + + +def test_list_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = securitycenter_service.ListAssetsResponse() + client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) + await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) +def test_list_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = list(client.list_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + client.list_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + +@pytest.mark.asyncio +async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_findings_async_from_dict(): + await test_list_findings_async(request_type=dict) + + +def test_list_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = securitycenter_service.ListFindingsResponse() + client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) + await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + finding.Finding(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + findings=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, finding.Finding) + for i in results) +def test_list_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + finding.Finding(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + findings=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + ], + ), + RuntimeError, + ) + pages = list(client.list_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + finding.Finding(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + findings=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, finding.Finding) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + finding.Finding(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + findings=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + client.list_sources() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + +@pytest.mark.asyncio +async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_sources_async_from_dict(): + await test_list_sources_async(request_type=dict) + + +def test_list_sources_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = securitycenter_service.ListSourcesResponse() + client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_sources_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_sources_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_sources_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_sources_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_sources_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_sources(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) +def test_list_sources_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = list(client.list_sources(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_sources_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_sources(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, source.Source) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_sources_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/spam') + response = client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_run_asset_discovery_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + client.run_asset_discovery() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + +@pytest.mark.asyncio +async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + response = await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_run_asset_discovery_async_from_dict(): + await test_run_asset_discovery_async(request_type=dict) + + +def test_run_asset_discovery_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = operations_pb2.Operation(name='operations/op') + client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_run_asset_discovery_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) + await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_run_asset_discovery_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_run_asset_discovery_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + response = client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_set_finding_state_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + client.set_finding_state() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + +@pytest.mark.asyncio +async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + )) + response = await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +@pytest.mark.asyncio +async def test_set_finding_state_async_from_dict(): + await test_set_finding_state_async(request_type=dict) + + +def test_set_finding_state_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = finding.Finding() + client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_finding_state_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_set_finding_state_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + + +def test_set_finding_state_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + client.set_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_set_iam_policy_async_from_dict(): + await test_set_iam_policy_async(request_type=dict) + + +def test_set_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_set_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.set_iam_policy(request={ + 'resource': 'resource_value', + 'policy': policy_pb2.Policy(version=774), + 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), + } + ) + call.assert_called() + + +def test_set_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_set_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + response = client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + client.test_iam_permissions() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + +@pytest.mark.asyncio +async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + )) + response = await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_async_from_dict(): + await test_test_iam_permissions_async(request_type=dict) + + +def test_test_iam_permissions_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_test_iam_permissions_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + response = client.test_iam_permissions(request={ + 'resource': 'resource_value', + 'permissions': ['permissions_value'], + } + ) + call.assert_called() + + +def test_test_iam_permissions_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + + +def test_test_iam_permissions_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + response = client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_update_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + client.update_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + +@pytest.mark.asyncio +async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + )) + response = await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +@pytest.mark.asyncio +async def test_update_finding_async_from_dict(): + await test_update_finding_async(request_type=dict) + + +def test_update_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +def test_update_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + + +def test_update_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + client.update_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_update_organization_settings_async_from_dict(): + await test_update_organization_settings_async(request_type=dict) + + +def test_update_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = gcs_organization_settings.OrganizationSettings() + client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +def test_update_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + + +def test_update_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + response = client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_update_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + client.update_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + +@pytest.mark.asyncio +async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + )) + response = await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +@pytest.mark.asyncio +async def test_update_source_async_from_dict(): + await test_update_source_async(request_type=dict) + + +def test_update_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +def test_update_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_source( + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + + +def test_update_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_source( + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks( + name='name_value', + ) + response = client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + + +def test_update_security_marks_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + client.update_security_marks() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + +@pytest.mark.asyncio +async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( + name='name_value', + )) + response = await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + + +@pytest.mark.asyncio +async def test_update_security_marks_async_from_dict(): + await test_update_security_marks_async(request_type=dict) + + +def test_update_security_marks_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = gcs_security_marks.SecurityMarks() + client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_security_marks_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +def test_update_security_marks_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + + +def test_update_security_marks_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.CreateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_source(request) + + +def test_create_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_create_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +def test_create_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["finding_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "findingId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == request_init["finding_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["findingId"] = 'finding_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("finding_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == 'finding_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_finding(request) + + expected_params = [ + ( + "findingId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.CreateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_finding(request) + + +def test_create_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) + + +def test_create_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +def test_create_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.GetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.GetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) + + +def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_get_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) + + request = securitycenter_service.GetOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = organization_settings.OrganizationSettings() + + client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_organization_settings(request) + + +def test_get_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/organizationSettings'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +def test_get_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = source.Source.to_json(source.Source()) + + request = securitycenter_service.GetSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = source.Source() + + client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_source(request) + + +def test_get_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_get_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +def test_get_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) + + request = securitycenter_service.GroupAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupAssetsResponse() + + client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_assets(request) + + +def test_group_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.group_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) + + request = securitycenter_service.GroupFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupFindingsResponse() + + client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_findings(request) + + +def test_group_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + group_by='group_by_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.group_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) + + +def test_group_findings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.group_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) + + request = securitycenter_service.ListAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListAssetsResponse() + + client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_assets(request) + + +def test_list_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) + + pages = list(client.list_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) + + request = securitycenter_service.ListFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListFindingsResponse() + + client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_findings(request) + + +def test_list_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + finding.Finding(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + findings=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + findings=[ + finding.Finding(), + finding.Finding(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.list_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, finding.Finding) + for i in results) + + pages = list(client.list_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_sources(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_sources(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_sources_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_sources._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_sources_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) + + request = securitycenter_service.ListSourcesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListSourcesResponse() + + client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_sources(request) + + +def test_list_sources_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_sources(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_list_sources_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_sources(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) + + pages = list(client.list_sources(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.run_asset_discovery(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.run_asset_discovery(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_run_asset_discovery_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_run_asset_discovery_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(operation.Operation, "_set_result_from_operation"), \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) + + request = securitycenter_service.RunAssetDiscoveryRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.run_asset_discovery(request) + + +def test_run_asset_discovery_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.run_asset_discovery(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) + + +def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +def test_run_asset_discovery_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_finding_state(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_finding_state(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_finding_state_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_finding_state._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_finding_state_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = finding.Finding.to_json(finding.Finding()) + + request = securitycenter_service.SetFindingStateRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = finding.Finding() + + client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_finding_state(request) + + +def test_set_finding_state_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_finding_state(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) + + +def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +def test_set_finding_state_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.SetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.SetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) + + +def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_set_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.test_iam_permissions(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request_init["permissions"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + jsonified_request["permissions"] = 'permissions_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + assert "permissions" in jsonified_request + assert jsonified_request["permissions"] == 'permissions_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.test_iam_permissions(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_test_iam_permissions_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_test_iam_permissions_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.TestIamPermissionsRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) + + request = iam_policy_pb2.TestIamPermissionsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.test_iam_permissions(request) + + +def test_test_iam_permissions_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + permissions=['permissions_value'], + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.test_iam_permissions(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) + + +def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +def test_test_iam_permissions_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + + +def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_finding(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.UpdateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_finding(request) + + +def test_update_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + + # get truthy value for each flattened field + mock_args = dict( + finding=gcs_finding.Finding(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) + + +def test_update_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + ) + + +def test_update_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) + + request = securitycenter_service.UpdateOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_organization_settings.OrganizationSettings() + + client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_organization_settings(request) + + +def test_update_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + + # get truthy value for each flattened field + mock_args = dict( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +def test_update_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + + +def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.UpdateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_source(request) + + +def test_update_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + source=gcs_source.Source(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_update_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + ) + + +def test_update_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks( + name='name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_security_marks(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + + +def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("start_time", "update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_security_marks(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_security_marks_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_security_marks._get_unset_required_fields({}) + assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_security_marks_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) + + request = securitycenter_service.UpdateSecurityMarksRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_security_marks.SecurityMarks() + + client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_security_marks(request) + + +def test_update_security_marks_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + + # get arguments that satisfy an http rule for this method + sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + + # get truthy value for each flattened field + mock_args = dict( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_security_marks(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) + + +def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + ) + + +def test_update_security_marks_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = SecurityCenterClient(transport=transport) + assert client.transport is transport + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.SecurityCenterGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + +@pytest.mark.parametrize("transport_class", [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, +]) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "rest", +]) +def test_transport_kind(transport_name): + transport = SecurityCenterClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.SecurityCenterGrpcTransport, + ) + +def test_security_center_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json" + ) + + +def test_security_center_base_transport(): + # Instantiate the base transport. + with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: + Transport.return_value = None + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + 'create_source', + 'create_finding', + 'get_iam_policy', + 'get_organization_settings', + 'get_source', + 'group_assets', + 'group_findings', + 'list_assets', + 'list_findings', + 'list_sources', + 'run_asset_discovery', + 'set_finding_state', + 'set_iam_policy', + 'test_iam_permissions', + 'update_finding', + 'update_organization_settings', + 'update_source', + 'update_security_marks', + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + 'kind', + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_security_center_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with("credentials.json", + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id="octopus", + ) + + +def test_security_center_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport() + adc.assert_called_once() + + +def test_security_center_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + SecurityCenterClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + ], +) +def test_security_center_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, + ], +) +def test_security_center_transport_auth_gdch_credentials(transport_class): + host = 'https://language.com' + api_audience_tests = [None, 'https://language2.com'] + api_audience_expect = [host, 'https://language2.com'] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with( + e + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.SecurityCenterGrpcTransport, grpc_helpers), + (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) + ], +) +def test_security_center_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class( + quota_project_id="octopus", + scopes=["1", "2"] + ) + + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=["1", "2"], + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_grpc_transport_client_cert_source_for_mtls( + transport_class +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, + private_key=expected_key + ) + +def test_security_center_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: + transports.SecurityCenterRestTransport ( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + +def test_security_center_rest_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.AbstractOperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_no_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com' + ) + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_with_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:8000' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com:8000' + ) + +@pytest.mark.parametrize("transport_name", [ + "rest", +]) +def test_security_center_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = SecurityCenterClient( + credentials=creds1, + transport=transport_name, + ) + client2 = SecurityCenterClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.create_source._session + session2 = client2.transport.create_source._session + assert session1 != session2 + session1 = client1.transport.create_finding._session + session2 = client2.transport.create_finding._session + assert session1 != session2 + session1 = client1.transport.get_iam_policy._session + session2 = client2.transport.get_iam_policy._session + assert session1 != session2 + session1 = client1.transport.get_organization_settings._session + session2 = client2.transport.get_organization_settings._session + assert session1 != session2 + session1 = client1.transport.get_source._session + session2 = client2.transport.get_source._session + assert session1 != session2 + session1 = client1.transport.group_assets._session + session2 = client2.transport.group_assets._session + assert session1 != session2 + session1 = client1.transport.group_findings._session + session2 = client2.transport.group_findings._session + assert session1 != session2 + session1 = client1.transport.list_assets._session + session2 = client2.transport.list_assets._session + assert session1 != session2 + session1 = client1.transport.list_findings._session + session2 = client2.transport.list_findings._session + assert session1 != session2 + session1 = client1.transport.list_sources._session + session2 = client2.transport.list_sources._session + assert session1 != session2 + session1 = client1.transport.run_asset_discovery._session + session2 = client2.transport.run_asset_discovery._session + assert session1 != session2 + session1 = client1.transport.set_finding_state._session + session2 = client2.transport.set_finding_state._session + assert session1 != session2 + session1 = client1.transport.set_iam_policy._session + session2 = client2.transport.set_iam_policy._session + assert session1 != session2 + session1 = client1.transport.test_iam_permissions._session + session2 = client2.transport.test_iam_permissions._session + assert session1 != session2 + session1 = client1.transport.update_finding._session + session2 = client2.transport.update_finding._session + assert session1 != session2 + session1 = client1.transport.update_organization_settings._session + session2 = client2.transport.update_organization_settings._session + assert session1 != session2 + session1 = client1.transport.update_source._session + session2 = client2.transport.update_source._session + assert session1 != session2 + session1 = client1.transport.update_security_marks._session + session2 = client2.transport.update_security_marks._session + assert session1 != session2 +def test_security_center_grpc_transport_channel(): + channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_security_center_grpc_asyncio_transport_channel(): + channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_client_cert_source( + transport_class +): + with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_adc( + transport_class +): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_security_center_grpc_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_security_center_grpc_lro_async_client(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc_asyncio', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_asset_path(): + organization = "squid" + asset = "clam" + expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.asset_path(organization, asset) + assert expected == actual + + +def test_parse_asset_path(): + expected = { + "organization": "whelk", + "asset": "octopus", + } + path = SecurityCenterClient.asset_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_asset_path(path) + assert expected == actual + +def test_finding_path(): + organization = "oyster" + source = "nudibranch" + finding = "cuttlefish" + expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + actual = SecurityCenterClient.finding_path(organization, source, finding) + assert expected == actual + + +def test_parse_finding_path(): + expected = { + "organization": "mussel", + "source": "winkle", + "finding": "nautilus", + } + path = SecurityCenterClient.finding_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_finding_path(path) + assert expected == actual + +def test_organization_settings_path(): + organization = "scallop" + expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) + actual = SecurityCenterClient.organization_settings_path(organization) + assert expected == actual + + +def test_parse_organization_settings_path(): + expected = { + "organization": "abalone", + } + path = SecurityCenterClient.organization_settings_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_organization_settings_path(path) + assert expected == actual + +def test_security_marks_path(): + organization = "squid" + asset = "clam" + expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.security_marks_path(organization, asset) + assert expected == actual + + +def test_parse_security_marks_path(): + expected = { + "organization": "whelk", + "asset": "octopus", + } + path = SecurityCenterClient.security_marks_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_marks_path(path) + assert expected == actual + +def test_source_path(): + organization = "oyster" + source = "nudibranch" + expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + actual = SecurityCenterClient.source_path(organization, source) + assert expected == actual + + +def test_parse_source_path(): + expected = { + "organization": "cuttlefish", + "source": "mussel", + } + path = SecurityCenterClient.source_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_source_path(path) + assert expected == actual + +def test_common_billing_account_path(): + billing_account = "winkle" + expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + actual = SecurityCenterClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "nautilus", + } + path = SecurityCenterClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_billing_account_path(path) + assert expected == actual + +def test_common_folder_path(): + folder = "scallop" + expected = "folders/{folder}".format(folder=folder, ) + actual = SecurityCenterClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "abalone", + } + path = SecurityCenterClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_folder_path(path) + assert expected == actual + +def test_common_organization_path(): + organization = "squid" + expected = "organizations/{organization}".format(organization=organization, ) + actual = SecurityCenterClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "clam", + } + path = SecurityCenterClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_organization_path(path) + assert expected == actual + +def test_common_project_path(): + project = "whelk" + expected = "projects/{project}".format(project=project, ) + actual = SecurityCenterClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "octopus", + } + path = SecurityCenterClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_project_path(path) + assert expected == actual + +def test_common_location_path(): + project = "oyster" + location = "nudibranch" + expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) + actual = SecurityCenterClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "cuttlefish", + "location": "mussel", + } + path = SecurityCenterClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + transport_class = SecurityCenterClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "rest": "_session", + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: + with client: + close.assert_not_called() + close.assert_called_once() + +def test_client_ctx(): + transports = [ + 'rest', + 'grpc', + ] + for transport in transports: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + +@pytest.mark.parametrize("client_class,transport_class", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), +]) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) diff --git a/owl-bot-staging/v1p1beta1/.coveragerc b/owl-bot-staging/v1p1beta1/.coveragerc new file mode 100644 index 00000000..45cb273f --- /dev/null +++ b/owl-bot-staging/v1p1beta1/.coveragerc @@ -0,0 +1,13 @@ +[run] +branch = True + +[report] +show_missing = True +omit = + google/cloud/securitycenter/__init__.py + google/cloud/securitycenter/gapic_version.py +exclude_lines = + # Re-enable the standard pragma + pragma: NO COVER + # Ignore debug-only repr + def __repr__ diff --git a/owl-bot-staging/v1p1beta1/.flake8 b/owl-bot-staging/v1p1beta1/.flake8 new file mode 100644 index 00000000..29227d4c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/.flake8 @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2020 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 +# +# https://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. + +# Generated by synthtool. DO NOT EDIT! +[flake8] +ignore = E203, E266, E501, W503 +exclude = + # Exclude generated code. + **/proto/** + **/gapic/** + **/services/** + **/types/** + *_pb2.py + + # Standard linting exemptions. + **/.nox/** + __pycache__, + .git, + *.pyc, + conf.py diff --git a/owl-bot-staging/v1p1beta1/MANIFEST.in b/owl-bot-staging/v1p1beta1/MANIFEST.in new file mode 100644 index 00000000..57b563bd --- /dev/null +++ b/owl-bot-staging/v1p1beta1/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include google/cloud/securitycenter *.py +recursive-include google/cloud/securitycenter_v1p1beta1 *.py diff --git a/owl-bot-staging/v1p1beta1/README.rst b/owl-bot-staging/v1p1beta1/README.rst new file mode 100644 index 00000000..f8c63f4c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/README.rst @@ -0,0 +1,49 @@ +Python Client for Google Cloud Securitycenter API +================================================= + +Quick Start +----------- + +In order to use this library, you first need to go through the following steps: + +1. `Select or create a Cloud Platform project.`_ +2. `Enable billing for your project.`_ +3. Enable the Google Cloud Securitycenter API. +4. `Setup Authentication.`_ + +.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project +.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project +.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html + +Installation +~~~~~~~~~~~~ + +Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to +create isolated Python environments. The basic problem it addresses is one of +dependencies and versions, and indirectly permissions. + +With `virtualenv`_, it's possible to install this library without needing system +install permissions, and without clashing with the installed system +dependencies. + +.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ + + +Mac/Linux +^^^^^^^^^ + +.. code-block:: console + + python3 -m venv + source /bin/activate + /bin/pip install /path/to/library + + +Windows +^^^^^^^ + +.. code-block:: console + + python3 -m venv + \Scripts\activate + \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1p1beta1/docs/conf.py b/owl-bot-staging/v1p1beta1/docs/conf.py new file mode 100644 index 00000000..488728ba --- /dev/null +++ b/owl-bot-staging/v1p1beta1/docs/conf.py @@ -0,0 +1,376 @@ +# -*- 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. +# +# +# google-cloud-securitycenter documentation build configuration file +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath("..")) + +__version__ = "0.1.0" + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +needs_sphinx = "4.0.1" + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.intersphinx", + "sphinx.ext.coverage", + "sphinx.ext.napoleon", + "sphinx.ext.todo", + "sphinx.ext.viewcode", +] + +# autodoc/autosummary flags +autoclass_content = "both" +autodoc_default_flags = ["members"] +autosummary_generate = True + + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# Allow markdown includes (so releases.md can include CHANGLEOG.md) +# http://www.sphinx-doc.org/en/master/markdown.html +source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +source_suffix = [".rst", ".md"] + +# The encoding of source files. +# source_encoding = 'utf-8-sig' + +# The root toctree document. +root_doc = "index" + +# General information about the project. +project = u"google-cloud-securitycenter" +copyright = u"2022, Google, LLC" +author = u"Google APIs" # TODO: autogenerate this bit + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The full version, including alpha/beta/rc tags. +release = __version__ +# The short X.Y version. +version = ".".join(release.split(".")[0:2]) + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +# today = '' +# Else, today_fmt is used as the format for a strftime call. +# today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ["_build"] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +# default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +# add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +# add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +# show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +# A list of ignored prefixes for module index sorting. +# modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +# keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = "alabaster" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +html_theme_options = { + "description": "Google Cloud Client Libraries for Python", + "github_user": "googleapis", + "github_repo": "google-cloud-python", + "github_banner": True, + "font_family": "'Roboto', Georgia, sans", + "head_font_family": "'Roboto', Georgia, serif", + "code_font_family": "'Roboto Mono', 'Consolas', monospace", +} + +# Add any paths that contain custom themes here, relative to this directory. +# html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +# html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +# html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +# html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +# html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +# html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +# html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +# html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +# html_additional_pages = {} + +# If false, no module index is generated. +# html_domain_indices = True + +# If false, no index is generated. +# html_use_index = True + +# If true, the index is split into individual pages for each letter. +# html_split_index = False + +# If true, links to the reST sources are added to the pages. +# html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +# html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +# html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +# html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +# html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +# html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +# html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +# html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = "google-cloud-securitycenter-doc" + +# -- Options for warnings ------------------------------------------------------ + + +suppress_warnings = [ + # Temporarily suppress this to avoid "more than one target found for + # cross-reference" warning, which are intractable for us to avoid while in + # a mono-repo. + # See https://github.com/sphinx-doc/sphinx/blob + # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 + "ref.python" +] + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # 'preamble': '', + # Latex figure (float) alignment + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + ( + root_doc, + "google-cloud-securitycenter.tex", + u"google-cloud-securitycenter Documentation", + author, + "manual", + ) +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +# latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +# latex_use_parts = False + +# If true, show page references after internal links. +# latex_show_pagerefs = False + +# If true, show URL addresses after external links. +# latex_show_urls = False + +# Documents to append as an appendix to all manuals. +# latex_appendices = [] + +# If false, no module index is generated. +# latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ( + root_doc, + "google-cloud-securitycenter", + u"Google Cloud Securitycenter Documentation", + [author], + 1, + ) +] + +# If true, show URL addresses after external links. +# man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + root_doc, + "google-cloud-securitycenter", + u"google-cloud-securitycenter Documentation", + author, + "google-cloud-securitycenter", + "GAPIC library for Google Cloud Securitycenter API", + "APIs", + ) +] + +# Documents to append as an appendix to all manuals. +# texinfo_appendices = [] + +# If false, no module index is generated. +# texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +# texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +# texinfo_no_detailmenu = False + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + "python": ("http://python.readthedocs.org/en/latest/", None), + "gax": ("https://gax-python.readthedocs.org/en/latest/", None), + "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), + "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), + "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), + "grpc": ("https://grpc.io/grpc/python/", None), + "requests": ("http://requests.kennethreitz.org/en/stable/", None), + "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), + "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), +} + + +# Napoleon settings +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = True +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True diff --git a/owl-bot-staging/v1p1beta1/docs/index.rst b/owl-bot-staging/v1p1beta1/docs/index.rst new file mode 100644 index 00000000..45263147 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/docs/index.rst @@ -0,0 +1,7 @@ +API Reference +------------- +.. toctree:: + :maxdepth: 2 + + securitycenter_v1p1beta1/services + securitycenter_v1p1beta1/types diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst new file mode 100644 index 00000000..adab7f4a --- /dev/null +++ b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst @@ -0,0 +1,10 @@ +SecurityCenter +-------------------------------- + +.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center + :members: + :inherited-members: + +.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center.pagers + :members: + :inherited-members: diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst new file mode 100644 index 00000000..7f537e85 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst @@ -0,0 +1,6 @@ +Services for Google Cloud Securitycenter v1p1beta1 API +====================================================== +.. toctree:: + :maxdepth: 2 + + security_center diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst new file mode 100644 index 00000000..a68ac5c6 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst @@ -0,0 +1,6 @@ +Types for Google Cloud Securitycenter v1p1beta1 API +=================================================== + +.. automodule:: google.cloud.securitycenter_v1p1beta1.types + :members: + :show-inheritance: diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py new file mode 100644 index 00000000..af60b39b --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py @@ -0,0 +1,101 @@ +# -*- 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. +# +from google.cloud.securitycenter import gapic_version as package_version + +__version__ = package_version.__version__ + + +from google.cloud.securitycenter_v1p1beta1.services.security_center.client import SecurityCenterClient +from google.cloud.securitycenter_v1p1beta1.services.security_center.async_client import SecurityCenterAsyncClient + +from google.cloud.securitycenter_v1p1beta1.types.asset import Asset +from google.cloud.securitycenter_v1p1beta1.types.finding import Finding +from google.cloud.securitycenter_v1p1beta1.types.folder import Folder +from google.cloud.securitycenter_v1p1beta1.types.notification_config import NotificationConfig +from google.cloud.securitycenter_v1p1beta1.types.notification_message import NotificationMessage +from google.cloud.securitycenter_v1p1beta1.types.organization_settings import OrganizationSettings +from google.cloud.securitycenter_v1p1beta1.types.resource import Resource +from google.cloud.securitycenter_v1p1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse +from google.cloud.securitycenter_v1p1beta1.types.security_marks import SecurityMarks +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateFindingRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateNotificationConfigRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateSourceRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import DeleteNotificationConfigRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetNotificationConfigRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetOrganizationSettingsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetSourceRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupResult +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesResponse +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import RunAssetDiscoveryRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import SetFindingStateRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateFindingRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateNotificationConfigRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSecurityMarksRequest +from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSourceRequest +from google.cloud.securitycenter_v1p1beta1.types.source import Source + +__all__ = ('SecurityCenterClient', + 'SecurityCenterAsyncClient', + 'Asset', + 'Finding', + 'Folder', + 'NotificationConfig', + 'NotificationMessage', + 'OrganizationSettings', + 'Resource', + 'RunAssetDiscoveryResponse', + 'SecurityMarks', + 'CreateFindingRequest', + 'CreateNotificationConfigRequest', + 'CreateSourceRequest', + 'DeleteNotificationConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'UpdateFindingRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py new file mode 100644 index 00000000..55bd462e --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py @@ -0,0 +1,102 @@ +# -*- 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. +# +from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version + +__version__ = package_version.__version__ + + +from .services.security_center import SecurityCenterClient +from .services.security_center import SecurityCenterAsyncClient + +from .types.asset import Asset +from .types.finding import Finding +from .types.folder import Folder +from .types.notification_config import NotificationConfig +from .types.notification_message import NotificationMessage +from .types.organization_settings import OrganizationSettings +from .types.resource import Resource +from .types.run_asset_discovery_response import RunAssetDiscoveryResponse +from .types.security_marks import SecurityMarks +from .types.securitycenter_service import CreateFindingRequest +from .types.securitycenter_service import CreateNotificationConfigRequest +from .types.securitycenter_service import CreateSourceRequest +from .types.securitycenter_service import DeleteNotificationConfigRequest +from .types.securitycenter_service import GetNotificationConfigRequest +from .types.securitycenter_service import GetOrganizationSettingsRequest +from .types.securitycenter_service import GetSourceRequest +from .types.securitycenter_service import GroupAssetsRequest +from .types.securitycenter_service import GroupAssetsResponse +from .types.securitycenter_service import GroupFindingsRequest +from .types.securitycenter_service import GroupFindingsResponse +from .types.securitycenter_service import GroupResult +from .types.securitycenter_service import ListAssetsRequest +from .types.securitycenter_service import ListAssetsResponse +from .types.securitycenter_service import ListFindingsRequest +from .types.securitycenter_service import ListFindingsResponse +from .types.securitycenter_service import ListNotificationConfigsRequest +from .types.securitycenter_service import ListNotificationConfigsResponse +from .types.securitycenter_service import ListSourcesRequest +from .types.securitycenter_service import ListSourcesResponse +from .types.securitycenter_service import RunAssetDiscoveryRequest +from .types.securitycenter_service import SetFindingStateRequest +from .types.securitycenter_service import UpdateFindingRequest +from .types.securitycenter_service import UpdateNotificationConfigRequest +from .types.securitycenter_service import UpdateOrganizationSettingsRequest +from .types.securitycenter_service import UpdateSecurityMarksRequest +from .types.securitycenter_service import UpdateSourceRequest +from .types.source import Source + +__all__ = ( + 'SecurityCenterAsyncClient', +'Asset', +'CreateFindingRequest', +'CreateNotificationConfigRequest', +'CreateSourceRequest', +'DeleteNotificationConfigRequest', +'Finding', +'Folder', +'GetNotificationConfigRequest', +'GetOrganizationSettingsRequest', +'GetSourceRequest', +'GroupAssetsRequest', +'GroupAssetsResponse', +'GroupFindingsRequest', +'GroupFindingsResponse', +'GroupResult', +'ListAssetsRequest', +'ListAssetsResponse', +'ListFindingsRequest', +'ListFindingsResponse', +'ListNotificationConfigsRequest', +'ListNotificationConfigsResponse', +'ListSourcesRequest', +'ListSourcesResponse', +'NotificationConfig', +'NotificationMessage', +'OrganizationSettings', +'Resource', +'RunAssetDiscoveryRequest', +'RunAssetDiscoveryResponse', +'SecurityCenterClient', +'SecurityMarks', +'SetFindingStateRequest', +'Source', +'UpdateFindingRequest', +'UpdateNotificationConfigRequest', +'UpdateOrganizationSettingsRequest', +'UpdateSecurityMarksRequest', +'UpdateSourceRequest', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json new file mode 100644 index 00000000..892a85e5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json @@ -0,0 +1,373 @@ + { + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "python", + "libraryPackage": "google.cloud.securitycenter_v1p1beta1", + "protoPackage": "google.cloud.securitycenter.v1p1beta1", + "schema": "1.0", + "services": { + "SecurityCenter": { + "clients": { + "grpc": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "grpc-async": { + "libraryClient": "SecurityCenterAsyncClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + }, + "rest": { + "libraryClient": "SecurityCenterClient", + "rpcs": { + "CreateFinding": { + "methods": [ + "create_finding" + ] + }, + "CreateNotificationConfig": { + "methods": [ + "create_notification_config" + ] + }, + "CreateSource": { + "methods": [ + "create_source" + ] + }, + "DeleteNotificationConfig": { + "methods": [ + "delete_notification_config" + ] + }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, + "GetNotificationConfig": { + "methods": [ + "get_notification_config" + ] + }, + "GetOrganizationSettings": { + "methods": [ + "get_organization_settings" + ] + }, + "GetSource": { + "methods": [ + "get_source" + ] + }, + "GroupAssets": { + "methods": [ + "group_assets" + ] + }, + "GroupFindings": { + "methods": [ + "group_findings" + ] + }, + "ListAssets": { + "methods": [ + "list_assets" + ] + }, + "ListFindings": { + "methods": [ + "list_findings" + ] + }, + "ListNotificationConfigs": { + "methods": [ + "list_notification_configs" + ] + }, + "ListSources": { + "methods": [ + "list_sources" + ] + }, + "RunAssetDiscovery": { + "methods": [ + "run_asset_discovery" + ] + }, + "SetFindingState": { + "methods": [ + "set_finding_state" + ] + }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, + "TestIamPermissions": { + "methods": [ + "test_iam_permissions" + ] + }, + "UpdateFinding": { + "methods": [ + "update_finding" + ] + }, + "UpdateNotificationConfig": { + "methods": [ + "update_notification_config" + ] + }, + "UpdateOrganizationSettings": { + "methods": [ + "update_organization_settings" + ] + }, + "UpdateSecurityMarks": { + "methods": [ + "update_security_marks" + ] + }, + "UpdateSource": { + "methods": [ + "update_source" + ] + } + } + } + } + } + } +} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py new file mode 100644 index 00000000..405b1ceb --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py @@ -0,0 +1,16 @@ +# -*- 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. +# +__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed new file mode 100644 index 00000000..23a44fc7 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed @@ -0,0 +1,2 @@ +# Marker file for PEP 561. +# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py new file mode 100644 index 00000000..e8e1c384 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py @@ -0,0 +1,15 @@ +# -*- 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. +# diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py new file mode 100644 index 00000000..4712915a --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py @@ -0,0 +1,22 @@ +# -*- 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. +# +from .client import SecurityCenterClient +from .async_client import SecurityCenterAsyncClient + +__all__ = ( + 'SecurityCenterClient', + 'SecurityCenterAsyncClient', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py new file mode 100644 index 00000000..7347ebbc --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py @@ -0,0 +1,3083 @@ +# -*- 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. +# +from collections import OrderedDict +import functools +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union + +from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version + +from google.api_core.client_options import ClientOptions +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1p1beta1.types import security_marks +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .client import SecurityCenterClient + + +class SecurityCenterAsyncClient: + """V1p1Beta1 APIs for Security Center service.""" + + _client: SecurityCenterClient + + DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT + DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT + + asset_path = staticmethod(SecurityCenterClient.asset_path) + parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) + finding_path = staticmethod(SecurityCenterClient.finding_path) + parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) + notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) + parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) + organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) + parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) + security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) + parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) + source_path = staticmethod(SecurityCenterClient.source_path) + parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) + topic_path = staticmethod(SecurityCenterClient.topic_path) + parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) + common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) + parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) + common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) + parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) + common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) + parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) + common_project_path = staticmethod(SecurityCenterClient.common_project_path) + parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) + common_location_path = staticmethod(SecurityCenterClient.common_location_path) + parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterAsyncClient: The constructed client. + """ + return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore + + from_service_account_json = from_service_account_file + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client instance. + """ + return self._client.transport + + get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", + client_options: Optional[ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, ~.SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (ClientOptions): Custom options for the client. It + won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + """ + self._client = SecurityCenterClient( + credentials=credentials, + transport=transport, + client_options=client_options, + client_info=client_info, + + ) + + async def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_create_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]]): + The request object. Request message for creating a + source. + parent (:class:`str`): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_create_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]]): + The request object. Request message for creating a + finding. + parent (:class:`str`): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def create_notification_config(self, + request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + config_id: Optional[str] = None, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Creates a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_create_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = await client.create_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]]): + The request object. Request message for creating a + notification config. + parent (:class:`str`): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + config_id (:class:`str`): + Required. Unique identifier provided + by the client within the parent scope. + It must be between 1 and 128 characters, + and contains alphanumeric characters, + underscores or hyphens only. + + This corresponds to the ``config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): + Required. The notification config + being created. The name and the service + account will be ignored as they are both + output only fields on this resource. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, config_id, notification_config]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.CreateNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if config_id is not None: + request.config_id = config_id + if notification_config is not None: + request.notification_config = notification_config + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def delete_notification_config(self, + request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_notification_config(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]]): + The request object. Request message for deleting a + notification config. + name (:class:`str`): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.DeleteNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + async def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): + The request object. Request message for ``GetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_notification_config(self, + request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> notification_config.NotificationConfig: + r"""Gets a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_get_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]]): + The request object. Request message for getting a + notification config. + name (:class:`str`): + Required. Name of the notification config to get. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_notification_config, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]]): + The request object. Request message for getting + organization settings. + name (:class:`str`): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_get_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]]): + The request object. Request message for getting a source. + name (:class:`str`): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GetSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsAsyncPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_group_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsAsyncPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_group_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]]): + The request object. Request message for grouping by + findings. + parent (:class:`str`): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (:class:`str`): + Required. Expression that defines what assets fields to + use for grouping (including ``state_change``). The + string value should follow SQL syntax: comma separated + list of fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration + is set: + + - state_change + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.GroupFindingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.GroupFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsAsyncPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_list_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]]): + The request object. Request message for listing assets. + parent (:class:`str`): + Required. Name of the organization assets should belong + to. Its format is "organizations/[organization_id], + folders/[folder_id], or projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListAssetsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsAsyncPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1p1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_list_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]]): + The request object. Request message for listing findings. + parent (:class:`str`): + Required. Name of the source the findings belong to. Its + format is + "organizations/[organization_id]/sources/[source_id], + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]". To list + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/- or + projects/{projects_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListFindingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_notification_configs(self, + request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListNotificationConfigsAsyncPager: + r"""Lists notification configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]]): + The request object. Request message for listing + notification configs. + parent (:class:`str`): + Required. Name of the organization to list notification + configs. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager: + Response message for listing + notification configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListNotificationConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_notification_configs, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListNotificationConfigsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesAsyncPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_list_sources(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]]): + The request object. Request message for listing sources. + parent (:class:`str`): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id], folders/[folder_id], + or projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.ListSourcesRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListSourcesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation_async.AsyncOperation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]]): + The request object. Request message for running asset + discovery for an organization. + parent (:class:`str`): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation_async.AsyncOperation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` + Response of asset discovery run + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.RunAssetDiscoveryRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.run_asset_discovery, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation_async.from_gapic( + response, + self._client._transport.operations_client, + run_asset_discovery_response.RunAssetDiscoveryResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + async def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]]): + The request object. Request message for updating a + finding's state. + name (:class:`str`): + Required. The relative resource name of the finding. + See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding.State`): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.SetFindingStateRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_finding_state, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): + The request object. Request message for ``SetIamPolicy`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.set_iam_policy, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): + The request object. Request message for ``TestIamPermissions`` method. + resource (:class:`str`): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (:class:`MutableSequence[str]`): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + if isinstance(request, dict): + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_update_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]]): + The request object. Request message for updating or + creating a finding. + finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must be alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating the finding resource. + This field should not be specified when creating a + finding. + + When updating a finding, an empty mask is treated as + updating all mutable fields and replacing + source_properties. Individual source_properties can be + added/updated by using "source_properties." in the field + mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateFindingRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_finding, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_notification_config(self, + request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, + *, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_update_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = await client.update_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]]): + The request object. Request message for updating a + notification config. + notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): + Required. The notification config to + update. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating + the notification config. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([notification_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateNotificationConfigRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if notification_config is not None: + request.notification_config = notification_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_notification_config, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("notification_config.name", request.notification_config.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]]): + The request object. Request message for updating an + organization's settings. + organization_settings (:class:`google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings`): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_organization_settings, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_update_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]]): + The request object. Request message for updating a + source. + source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating + the source resource. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_source, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (:class:`google.cloud.securitycenter_v1p1beta1.types.SecurityMarks`): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The FieldMask to use when updating the security marks + resource. + + The field mask must not contain duplicate fields. If + empty or set to "marks", all marks will be replaced. + Individual marks can be updated using + "marks.". + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks, update_mask]) + if request is not None and has_flattened_params: + raise ValueError("If the `request` argument is set, then none of " + "the individual field arguments should be set.") + + request = securitycenter_service.UpdateSecurityMarksRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_marks, + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def __aenter__(self): + return self + + async def __aexit__(self, exc_type, exc, tb): + await self.transport.close() + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterAsyncClient", +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py new file mode 100644 index 00000000..887e5f66 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py @@ -0,0 +1,3264 @@ +# -*- 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. +# +from collections import OrderedDict +import os +import re +from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast + +from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version + +from google.api_core import client_options as client_options_lib +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + +from google.api_core import operation # type: ignore +from google.api_core import operation_async # type: ignore +from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1p1beta1.types import security_marks +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .transports.grpc import SecurityCenterGrpcTransport +from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .transports.rest import SecurityCenterRestTransport + + +class SecurityCenterClientMeta(type): + """Metaclass for the SecurityCenter client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] + _transport_registry["grpc"] = SecurityCenterGrpcTransport + _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport + _transport_registry["rest"] = SecurityCenterRestTransport + + def get_transport_class(cls, + label: Optional[str] = None, + ) -> Type[SecurityCenterTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class SecurityCenterClient(metaclass=SecurityCenterClientMeta): + """V1p1Beta1 APIs for Security Center service.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "securitycenter.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + SecurityCenterClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file( + filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> SecurityCenterTransport: + """Returns the transport used by the client instance. + + Returns: + SecurityCenterTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def asset_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified asset string.""" + return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_asset_path(path: str) -> Dict[str,str]: + """Parses a asset path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def finding_path(organization: str,source: str,finding: str,) -> str: + """Returns a fully-qualified finding string.""" + return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + + @staticmethod + def parse_finding_path(path: str) -> Dict[str,str]: + """Parses a finding path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def notification_config_path(organization: str,notification_config: str,) -> str: + """Returns a fully-qualified notification_config string.""" + return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) + + @staticmethod + def parse_notification_config_path(path: str) -> Dict[str,str]: + """Parses a notification_config path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def organization_settings_path(organization: str,) -> str: + """Returns a fully-qualified organization_settings string.""" + return "organizations/{organization}/organizationSettings".format(organization=organization, ) + + @staticmethod + def parse_organization_settings_path(path: str) -> Dict[str,str]: + """Parses a organization_settings path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) + return m.groupdict() if m else {} + + @staticmethod + def security_marks_path(organization: str,asset: str,) -> str: + """Returns a fully-qualified security_marks string.""" + return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + + @staticmethod + def parse_security_marks_path(path: str) -> Dict[str,str]: + """Parses a security_marks path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) + return m.groupdict() if m else {} + + @staticmethod + def source_path(organization: str,source: str,) -> str: + """Returns a fully-qualified source string.""" + return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + + @staticmethod + def parse_source_path(path: str) -> Dict[str,str]: + """Parses a source path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def topic_path(project: str,topic: str,) -> str: + """Returns a fully-qualified topic string.""" + return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) + + @staticmethod + def parse_topic_path(path: str) -> Dict[str,str]: + """Parses a topic path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_billing_account_path(billing_account: str, ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str,str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path(folder: str, ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format(folder=folder, ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str,str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path(organization: str, ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format(organization=organization, ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str,str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path(project: str, ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format(project=project, ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str,str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path(project: str, location: str, ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format(project=project, location=location, ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str,str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variable is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__(self, *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Optional[Union[str, SecurityCenterTransport]] = None, + client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the security center client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, SecurityCenterTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + client_options = cast(client_options_lib.ClientOptions, client_options) + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError("client_options.api_key and credentials are mutually exclusive") + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, SecurityCenterTransport): + # transport is a SecurityCenterTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError("When providing a transport instance, " + "provide its credentials directly.") + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): + credentials = google.auth._default.get_api_key_credentials(api_key_value) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def create_source(self, + request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, + *, + parent: Optional[str] = None, + source: Optional[gcs_source.Source] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Creates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_create_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]): + The request object. Request message for creating a + source. + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + source (google.cloud.securitycenter_v1p1beta1.types.Source): + Required. The Source being created, only the + display_name and description will be used. All other + fields will be ignored. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, source]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateSourceRequest): + request = securitycenter_service.CreateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if source is not None: + request.source = source + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_finding(self, + request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, + *, + parent: Optional[str] = None, + finding_id: Optional[str] = None, + finding: Optional[gcs_finding.Finding] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates a finding. The corresponding source must + exist for finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_create_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]): + The request object. Request message for creating a + finding. + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding_id (str): + Required. Unique identifier provided + by the client within the parent scope. + + This corresponds to the ``finding_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output + only fields on this resource. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, finding_id, finding]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateFindingRequest): + request = securitycenter_service.CreateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if finding_id is not None: + request.finding_id = finding_id + if finding is not None: + request.finding = finding + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def create_notification_config(self, + request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, + *, + parent: Optional[str] = None, + config_id: Optional[str] = None, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Creates a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_create_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = client.create_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]): + The request object. Request message for creating a + notification config. + parent (str): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + config_id (str): + Required. Unique identifier provided + by the client within the parent scope. + It must be between 1 and 128 characters, + and contains alphanumeric characters, + underscores or hyphens only. + + This corresponds to the ``config_id`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): + Required. The notification config + being created. The name and the service + account will be ignored as they are both + output only fields on this resource. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, config_id, notification_config]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): + request = securitycenter_service.CreateNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if config_id is not None: + request.config_id = config_id + if notification_config is not None: + request.notification_config = notification_config + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.create_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete_notification_config(self, + request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_notification_config(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]): + The request object. Request message for deleting a + notification config. + name (str): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): + request = securitycenter_service.DeleteNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + def get_iam_policy(self, + request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Gets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): + The request object. Request message for ``GetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being requested. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.GetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.GetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_notification_config(self, + request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> notification_config.NotificationConfig: + r"""Gets a notification config. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_get_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]): + The request object. Request message for getting a + notification config. + name (str): + Required. Name of the notification config to get. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): + request = securitycenter_service.GetNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_organization_settings(self, + request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Gets the settings for an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]): + The request object. Request message for getting + organization settings. + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): + request = securitycenter_service.GetOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_source(self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_get_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]): + The request object. Request message for getting a source. + name (str): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSourceRequest): + request = securitycenter_service.GetSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_assets(self, + request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_group_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupAssetsRequest): + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_findings(self, + request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + group_by: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupFindingsPager: + r"""Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_group_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]): + The request object. Request message for grouping by + findings. + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + group_by (str): + Required. Expression that defines what assets fields to + use for grouping (including ``state_change``). The + string value should follow SQL syntax: comma separated + list of fields. For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration + is set: + + - state_change + + This corresponds to the ``group_by`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager: + Response message for group by + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, group_by]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GroupFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GroupFindingsRequest): + request = securitycenter_service.GroupFindingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if group_by is not None: + request.group_by = group_by + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.group_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.GroupFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_assets(self, + request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListAssetsPager: + r"""Lists an organization's assets. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_list_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]): + The request object. Request message for listing assets. + parent (str): + Required. Name of the organization assets should belong + to. Its format is "organizations/[organization_id], + folders/[folder_id], or projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListAssetsRequest): + request = securitycenter_service.ListAssetsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_findings(self, + request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1p1beta1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_list_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]): + The request object. Request message for listing findings. + parent (str): + Required. Name of the source the findings belong to. Its + format is + "organizations/[organization_id]/sources/[source_id], + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]". To list + across all sources provide a source_id of ``-``. For + example: organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/- or + projects/{projects_id}/sources/- + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListFindingsRequest): + request = securitycenter_service.ListFindingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_notification_configs(self, + request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListNotificationConfigsPager: + r"""Lists notification configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]): + The request object. Request message for listing + notification configs. + parent (str): + Required. Name of the organization to list notification + configs. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager: + Response message for listing + notification configs. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListNotificationConfigsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): + request = securitycenter_service.ListNotificationConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListNotificationConfigsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_sources(self, + request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListSourcesPager: + r"""Lists all sources belonging to an organization. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_list_sources(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]): + The request object. Request message for listing sources. + parent (str): + Required. Resource name of the parent of sources to + list. Its format should be + "organizations/[organization_id], folders/[folder_id], + or projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager: + Response message for listing sources. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListSourcesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListSourcesRequest): + request = securitycenter_service.ListSourcesRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_sources] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListSourcesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def run_asset_discovery(self, + request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> operation.Operation: + r"""Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]): + The request object. Request message for running asset + discovery for an organization. + parent (str): + Required. Name of the organization to run asset + discovery for. Its format is + "organizations/[organization_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.api_core.operation.Operation: + An object representing a long-running operation. + + The result type for the operation will be + :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` + Response of asset discovery run + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.RunAssetDiscoveryRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): + request = securitycenter_service.RunAssetDiscoveryRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("parent", request.parent), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Wrap the response in an operation future. + response = operation.from_gapic( + response, + self._transport.operations_client, + run_asset_discovery_response.RunAssetDiscoveryResponse, + metadata_type=empty_pb2.Empty, + ) + + # Done; return the response. + return response + + def set_finding_state(self, + request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, + *, + name: Optional[str] = None, + state: Optional[finding.Finding.State] = None, + start_time: Optional[timestamp_pb2.Timestamp] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> finding.Finding: + r"""Updates the state of a finding. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_set_finding_state(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]): + The request object. Request message for updating a + finding's state. + name (str): + Required. The relative resource name of the finding. + See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): + Required. The desired State of the + finding. + + This corresponds to the ``state`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the + updated state takes effect. + + This corresponds to the ``start_time`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name, state, start_time]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.SetFindingStateRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.SetFindingStateRequest): + request = securitycenter_service.SetFindingStateRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + if state is not None: + request.state = state + if start_time is not None: + request.start_time = start_time + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_finding_state] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("name", request.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def set_iam_policy(self, + request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, + *, + resource: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> policy_pb2.Policy: + r"""Sets the access control policy on the specified + Source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): + The request object. Request message for ``SetIamPolicy`` method. + resource (str): + REQUIRED: The resource for which the + policy is being specified. See the + operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which specifies access + controls for Google Cloud resources. + + A Policy is a collection of bindings. A binding binds + one or more members, or principals, to a single role. + Principals can be user accounts, service accounts, + Google groups, and domains (such as G Suite). A role + is a named list of permissions; each role can be an + IAM predefined role or a user-created custom role. + + For some types of Google Cloud resources, a binding + can also specify a condition, which is a logical + expression that allows access to a resource only if + the expression evaluates to true. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the [IAM + documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). + + **JSON example:** + + { + "bindings": [ + { + "role": + "roles/resourcemanager.organizationAdmin", + "members": [ "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + + }, { "role": + "roles/resourcemanager.organizationViewer", + "members": [ "user:eve@example.com" ], + "condition": { "title": "expirable access", + "description": "Does not grant access after + Sep 2020", "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", } } + + ], "etag": "BwWWja0YfJA=", "version": 3 + + } + + **YAML example:** + + bindings: - members: - user:\ mike@example.com - + group:\ admins@example.com - domain:google.com - + serviceAccount:\ my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin - + members: - user:\ eve@example.com role: + roles/resourcemanager.organizationViewer + condition: title: expirable access description: + Does not grant access after Sep 2020 expression: + request.time < + timestamp('2020-10-01T00:00:00.000Z') etag: + BwWWja0YfJA= version: 3 + + For a description of IAM and its features, see the + [IAM + documentation](\ https://cloud.google.com/iam/docs/). + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.SetIamPolicyRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.SetIamPolicyRequest() + if resource is not None: + request.resource = resource + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def test_iam_permissions(self, + request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, + *, + resource: Optional[str] = None, + permissions: Optional[MutableSequence[str]] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Returns the permissions that a caller has on the + specified source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + from google.iam.v1 import iam_policy_pb2 # type: ignore + + def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): + The request object. Request message for ``TestIamPermissions`` method. + resource (str): + REQUIRED: The resource for which the + policy detail is being requested. See + the operation documentation for the + appropriate value for this field. + + This corresponds to the ``resource`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + permissions (MutableSequence[str]): + The set of permissions to check for the ``resource``. + Permissions with wildcards (such as '*' or 'storage.*') + are not allowed. For more information see `IAM + Overview `__. + + This corresponds to the ``permissions`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: + Response message for TestIamPermissions method. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([resource, permissions]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + if isinstance(request, dict): + # The request isn't a proto-plus wrapped type, + # so it must be constructed via keyword expansion. + request = iam_policy_pb2.TestIamPermissionsRequest(**request) + elif not request: + # Null request, just make one. + request = iam_policy_pb2.TestIamPermissionsRequest() + if resource is not None: + request.resource = resource + if permissions: + request.permissions.extend(permissions) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("resource", request.resource), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_finding(self, + request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, + *, + finding: Optional[gcs_finding.Finding] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_finding.Finding: + r"""Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_update_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]): + The request object. Request message for updating or + creating a finding. + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the + name must be alphanumeric and less than or equal to 32 + characters and greater than 0 characters in length. + + This corresponds to the ``finding`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the finding resource. + This field should not be specified when creating a + finding. + + When updating a finding, an empty mask is treated as + updating all mutable fields and replacing + source_properties. Individual source_properties can be + added/updated by using "source_properties." in the field + mask. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([finding, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateFindingRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateFindingRequest): + request = securitycenter_service.UpdateFindingRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if finding is not None: + request.finding = finding + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_finding] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("finding.name", request.finding.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_notification_config(self, + request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, + *, + notification_config: Optional[gcs_notification_config.NotificationConfig] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_notification_config.NotificationConfig: + r"""Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_update_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = client.update_notification_config(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]): + The request object. Request message for updating a + notification config. + notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): + Required. The notification config to + update. + + This corresponds to the ``notification_config`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating + the notification config. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([notification_config, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateNotificationConfigRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): + request = securitycenter_service.UpdateNotificationConfigRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if notification_config is not None: + request.notification_config = notification_config + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_notification_config] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("notification_config.name", request.notification_config.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_organization_settings(self, + request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, + *, + organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Updates an organization's settings. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]): + The request object. Request message for updating an + organization's settings. + organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): + Required. The organization settings + resource to update. + + This corresponds to the ``organization_settings`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([organization_settings]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateOrganizationSettingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): + request = securitycenter_service.UpdateOrganizationSettingsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if organization_settings is not None: + request.organization_settings = organization_settings + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("organization_settings.name", request.organization_settings.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_source(self, + request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, + *, + source: Optional[gcs_source.Source] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_source.Source: + r"""Updates a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_update_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]): + The request object. Request message for updating a + source. + source (google.cloud.securitycenter_v1p1beta1.types.Source): + Required. The source resource to + update. + + This corresponds to the ``source`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating + the source resource. + If empty all mutable fields will be + updated. + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([source, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSourceRequest): + request = securitycenter_service.UpdateSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if source is not None: + request.source = source + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("source.name", request.source.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def update_security_marks(self, + request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, + *, + security_marks: Optional[gcs_security_marks.SecurityMarks] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_marks.SecurityMarks: + r"""Updates security marks. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1p1beta1 + + def sample_update_security_marks(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]): + The request object. Request message for updating a + SecurityMarks resource. + security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): + Required. The security marks resource + to update. + + This corresponds to the ``security_marks`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the security marks + resource. + + The field mask must not contain duplicate fields. If + empty or set to "marks", all marks will be replaced. + Individual marks can be updated using + "marks.". + + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([security_marks, update_mask]) + if request is not None and has_flattened_params: + raise ValueError('If the `request` argument is set, then none of ' + 'the individual field arguments should be set.') + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityMarksRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): + request = securitycenter_service.UpdateSecurityMarksRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_marks is not None: + request.security_marks = security_marks + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.update_security_marks] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ("security_marks.name", request.security_marks.name), + )), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def __enter__(self) -> "SecurityCenterClient": + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + + + + + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +__all__ = ( + "SecurityCenterClient", +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py new file mode 100644 index 00000000..43850428 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py @@ -0,0 +1,746 @@ +# -*- 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. +# +from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator + +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source + + +class GroupAssetsPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupAssetsResponse], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupAssetsAsyncPager: + """A pager for iterating through ``group_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupAssets`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], + request: securitycenter_service.GroupAssetsRequest, + response: securitycenter_service.GroupAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.GroupFindingsResponse], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: + for page in self.pages: + yield from page.group_by_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class GroupFindingsAsyncPager: + """A pager for iterating through ``group_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``group_by_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``GroupFindings`` requests and continue to iterate + through the ``group_by_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], + request: securitycenter_service.GroupFindingsRequest, + response: securitycenter_service.GroupFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.GroupFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: + async def async_generator(): + async for page in self.pages: + for response in page.group_by_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListAssetsResponse], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + for page in self.pages: + yield from page.list_assets_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListAssetsAsyncPager: + """A pager for iterating through ``list_assets`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``list_assets_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListAssets`` requests and continue to iterate + through the ``list_assets_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], + request: securitycenter_service.ListAssetsRequest, + response: securitycenter_service.ListAssetsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListAssetsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: + async def async_generator(): + async for page in self.pages: + for response in page.list_assets_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``list_findings_results`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``list_findings_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListFindingsResponse], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: + for page in self.pages: + yield from page.list_findings_results + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListFindingsAsyncPager: + """A pager for iterating through ``list_findings`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``list_findings_results`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListFindings`` requests and continue to iterate + through the ``list_findings_results`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], + request: securitycenter_service.ListFindingsRequest, + response: securitycenter_service.ListFindingsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListFindingsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: + async def async_generator(): + async for page in self.pages: + for response in page.list_findings_results: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListNotificationConfigsPager: + """A pager for iterating through ``list_notification_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and + provides an ``__iter__`` method to iterate through its + ``notification_configs`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListNotificationConfigs`` requests and continue to iterate + through the ``notification_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], + request: securitycenter_service.ListNotificationConfigsRequest, + response: securitycenter_service.ListNotificationConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListNotificationConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[notification_config.NotificationConfig]: + for page in self.pages: + yield from page.notification_configs + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListNotificationConfigsAsyncPager: + """A pager for iterating through ``list_notification_configs`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``notification_configs`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListNotificationConfigs`` requests and continue to iterate + through the ``notification_configs`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], + request: securitycenter_service.ListNotificationConfigsRequest, + response: securitycenter_service.ListNotificationConfigsResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListNotificationConfigsRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: + async def async_generator(): + async for page in self.pages: + for response in page.notification_configs: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., securitycenter_service.ListSourcesResponse], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[source.Source]: + for page in self.pages: + yield from page.sources + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) + + +class ListSourcesAsyncPager: + """A pager for iterating through ``list_sources`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``sources`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSources`` requests and continue to iterate + through the ``sources`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + def __init__(self, + method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], + request: securitycenter_service.ListSourcesRequest, + response: securitycenter_service.ListSourcesResponse, + *, + metadata: Sequence[Tuple[str, str]] = ()): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): + The initial request object. + response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListSourcesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + def __aiter__(self) -> AsyncIterator[source.Source]: + async def async_generator(): + async for page in self.pages: + for response in page.sources: + yield response + + return async_generator() + + def __repr__(self) -> str: + return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py new file mode 100644 index 00000000..be15b558 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py @@ -0,0 +1,38 @@ +# -*- 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import SecurityCenterTransport +from .grpc import SecurityCenterGrpcTransport +from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport +from .rest import SecurityCenterRestTransport +from .rest import SecurityCenterRestInterceptor + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] +_transport_registry['grpc'] = SecurityCenterGrpcTransport +_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport +_transport_registry['rest'] = SecurityCenterRestTransport + +__all__ = ( + 'SecurityCenterTransport', + 'SecurityCenterGrpcTransport', + 'SecurityCenterGrpcAsyncIOTransport', + 'SecurityCenterRestTransport', + 'SecurityCenterRestInterceptor', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py new file mode 100644 index 00000000..a714de00 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py @@ -0,0 +1,552 @@ +# -*- 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union + +from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version + +import google.auth # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +from google.api_core import gapic_v1 +from google.api_core import retry as retries +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.oauth2 import service_account # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) + + +class SecurityCenterTransport(abc.ABC): + """Abstract transport class for SecurityCenter.""" + + AUTH_SCOPES = ( + 'https://www.googleapis.com/auth/cloud-platform', + ) + + DEFAULT_HOST: str = 'securitycenter.googleapis.com' + def __init__( + self, *, + host: str = DEFAULT_HOST, + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, + **scopes_kwargs, + quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience(api_audience if api_audience else host) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ':' not in host: + host += ':443' + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.create_source: gapic_v1.method.wrap_method( + self.create_source, + default_timeout=60.0, + client_info=client_info, + ), + self.create_finding: gapic_v1.method.wrap_method( + self.create_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.create_notification_config: gapic_v1.method.wrap_method( + self.create_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.delete_notification_config: gapic_v1.method.wrap_method( + self.delete_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.get_iam_policy: gapic_v1.method.wrap_method( + self.get_iam_policy, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_notification_config: gapic_v1.method.wrap_method( + self.get_notification_config, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_organization_settings: gapic_v1.method.wrap_method( + self.get_organization_settings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_source: gapic_v1.method.wrap_method( + self.get_source, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.group_assets: gapic_v1.method.wrap_method( + self.group_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.group_findings: gapic_v1.method.wrap_method( + self.group_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_assets: gapic_v1.method.wrap_method( + self.list_assets, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_findings: gapic_v1.method.wrap_method( + self.list_findings, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=client_info, + ), + self.list_notification_configs: gapic_v1.method.wrap_method( + self.list_notification_configs, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_sources: gapic_v1.method.wrap_method( + self.list_sources, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.run_asset_discovery: gapic_v1.method.wrap_method( + self.run_asset_discovery, + default_timeout=60.0, + client_info=client_info, + ), + self.set_finding_state: gapic_v1.method.wrap_method( + self.set_finding_state, + default_timeout=60.0, + client_info=client_info, + ), + self.set_iam_policy: gapic_v1.method.wrap_method( + self.set_iam_policy, + default_timeout=60.0, + client_info=client_info, + ), + self.test_iam_permissions: gapic_v1.method.wrap_method( + self.test_iam_permissions, + default_retry=retries.Retry( +initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.update_finding: gapic_v1.method.wrap_method( + self.update_finding, + default_timeout=60.0, + client_info=client_info, + ), + self.update_notification_config: gapic_v1.method.wrap_method( + self.update_notification_config, + default_timeout=60.0, + client_info=client_info, + ), + self.update_organization_settings: gapic_v1.method.wrap_method( + self.update_organization_settings, + default_timeout=60.0, + client_info=client_info, + ), + self.update_source: gapic_v1.method.wrap_method( + self.update_source, + default_timeout=60.0, + client_info=client_info, + ), + self.update_security_marks: gapic_v1.method.wrap_method( + self.update_security_marks, + default_timeout=480.0, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def operations_client(self): + """Return the client designed to process long-running operations.""" + raise NotImplementedError() + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + Union[ + gcs_notification_config.NotificationConfig, + Awaitable[gcs_notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + Union[ + empty_pb2.Empty, + Awaitable[empty_pb2.Empty] + ]]: + raise NotImplementedError() + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + Union[ + notification_config.NotificationConfig, + Awaitable[notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Union[ + organization_settings.OrganizationSettings, + Awaitable[organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Union[ + source.Source, + Awaitable[source.Source] + ]]: + raise NotImplementedError() + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Union[ + securitycenter_service.GroupAssetsResponse, + Awaitable[securitycenter_service.GroupAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Union[ + securitycenter_service.GroupFindingsResponse, + Awaitable[securitycenter_service.GroupFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Union[ + securitycenter_service.ListAssetsResponse, + Awaitable[securitycenter_service.ListAssetsResponse] + ]]: + raise NotImplementedError() + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Union[ + securitycenter_service.ListFindingsResponse, + Awaitable[securitycenter_service.ListFindingsResponse] + ]]: + raise NotImplementedError() + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + Union[ + securitycenter_service.ListNotificationConfigsResponse, + Awaitable[securitycenter_service.ListNotificationConfigsResponse] + ]]: + raise NotImplementedError() + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Union[ + securitycenter_service.ListSourcesResponse, + Awaitable[securitycenter_service.ListSourcesResponse] + ]]: + raise NotImplementedError() + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Union[ + operations_pb2.Operation, + Awaitable[operations_pb2.Operation] + ]]: + raise NotImplementedError() + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Union[ + finding.Finding, + Awaitable[finding.Finding] + ]]: + raise NotImplementedError() + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Union[ + policy_pb2.Policy, + Awaitable[policy_pb2.Policy] + ]]: + raise NotImplementedError() + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Union[ + iam_policy_pb2.TestIamPermissionsResponse, + Awaitable[iam_policy_pb2.TestIamPermissionsResponse] + ]]: + raise NotImplementedError() + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Union[ + gcs_finding.Finding, + Awaitable[gcs_finding.Finding] + ]]: + raise NotImplementedError() + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + Union[ + gcs_notification_config.NotificationConfig, + Awaitable[gcs_notification_config.NotificationConfig] + ]]: + raise NotImplementedError() + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Union[ + gcs_organization_settings.OrganizationSettings, + Awaitable[gcs_organization_settings.OrganizationSettings] + ]]: + raise NotImplementedError() + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Union[ + gcs_source.Source, + Awaitable[gcs_source.Source] + ]]: + raise NotImplementedError() + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Union[ + gcs_security_marks.SecurityMarks, + Awaitable[gcs_security_marks.SecurityMarks] + ]]: + raise NotImplementedError() + + @property + def kind(self) -> str: + raise NotImplementedError() + + +__all__ = ( + 'SecurityCenterTransport', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py new file mode 100644 index 00000000..50fdbe6a --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py @@ -0,0 +1,889 @@ +# -*- 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 warnings +from typing import Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import grpc_helpers +from google.api_core import operations_v1 +from google.api_core import gapic_v1 +import google.auth # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO + + +class SecurityCenterGrpcTransport(SecurityCenterTransport): + """gRPC backend transport for SecurityCenter. + + V1p1Beta1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + _stubs: Dict[str, Callable] + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[grpc.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + channel (Optional[grpc.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> grpc.Channel: + """Create and return a gRPC channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + grpc.Channel: A gRPC channel object. + + Raises: + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + + return grpc_helpers.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + @property + def grpc_channel(self) -> grpc.Channel: + """Return the channel designed to connect to this service. + """ + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + r"""Return a callable for the create notification config method over gRPC. + + Creates a notification config. + + Returns: + Callable[[~.CreateNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_notification_config' not in self._stubs: + self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', + request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['create_notification_config'] + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + empty_pb2.Empty]: + r"""Return a callable for the delete notification config method over gRPC. + + Deletes a notification config. + + Returns: + Callable[[~.DeleteNotificationConfigRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_notification_config' not in self._stubs: + self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', + request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_notification_config'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + notification_config.NotificationConfig]: + r"""Return a callable for the get notification config method over gRPC. + + Gets a notification config. + + Returns: + Callable[[~.GetNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_notification_config' not in self._stubs: + self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', + request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, + response_deserializer=notification_config.NotificationConfig.deserialize, + ) + return self._stubs['get_notification_config'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + ~.GroupAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + ~.GroupFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + ~.ListAssetsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1p1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + ~.ListFindingsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + securitycenter_service.ListNotificationConfigsResponse]: + r"""Return a callable for the list notification configs method over gRPC. + + Lists notification configs. + + Returns: + Callable[[~.ListNotificationConfigsRequest], + ~.ListNotificationConfigsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_notification_configs' not in self._stubs: + self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', + request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, + ) + return self._stubs['list_notification_configs'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + ~.ListSourcesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + ~.Operation]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + ~.Policy]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + ~.TestIamPermissionsResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + ~.Finding]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + r"""Return a callable for the update notification config method over gRPC. + + Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + Returns: + Callable[[~.UpdateNotificationConfigRequest], + ~.NotificationConfig]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_notification_config' not in self._stubs: + self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', + request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['update_notification_config'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + ~.OrganizationSettings]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + ~.Source]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + ~.SecurityMarks]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + def close(self): + self.grpc_channel.close() + + @property + def kind(self) -> str: + return "grpc" + + +__all__ = ( + 'SecurityCenterGrpcTransport', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py new file mode 100644 index 00000000..5376ce4f --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py @@ -0,0 +1,888 @@ +# -*- 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 warnings +from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union + +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers_async +from google.api_core import operations_v1 +from google.auth import credentials as ga_credentials # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore + +import grpc # type: ignore +from grpc.experimental import aio # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO +from .grpc import SecurityCenterGrpcTransport + + +class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): + """gRPC AsyncIO backend transport for SecurityCenter. + + V1p1Beta1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends protocol buffers over the wire using gRPC (which is built on + top of HTTP/2); the ``grpcio`` package must be installed. + """ + + _grpc_channel: aio.Channel + _stubs: Dict[str, Callable] = {} + + @classmethod + def create_channel(cls, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + **kwargs) -> aio.Channel: + """Create and return a gRPC AsyncIO channel object. + Args: + host (Optional[str]): The host for the channel to use. + credentials (Optional[~.Credentials]): The + authorization credentials to attach to requests. These + credentials identify this application to the service. If + none are specified, the client will attempt to ascertain + the credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + kwargs (Optional[dict]): Keyword arguments, which are passed to the + channel creation. + Returns: + aio.Channel: A gRPC AsyncIO channel object. + """ + + return grpc_helpers_async.create_channel( + host, + credentials=credentials, + credentials_file=credentials_file, + quota_project_id=quota_project_id, + default_scopes=cls.AUTH_SCOPES, + scopes=scopes, + default_host=cls.DEFAULT_HOST, + **kwargs + ) + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + channel: Optional[aio.Channel] = None, + api_mtls_endpoint: Optional[str] = None, + client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, + client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + This argument is ignored if ``channel`` is provided. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional[Sequence[str]]): A optional list of scopes needed for this + service. These are only used when credentials are not specified and + are passed to :func:`google.auth.default`. + channel (Optional[aio.Channel]): A ``Channel`` instance through + which to make calls. + api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. + If provided, it overrides the ``host`` argument and tries to create + a mutual TLS channel with client SSL credentials from + ``client_cert_source`` or application default SSL credentials. + client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): + Deprecated. A callback to provide client SSL certificate bytes and + private key bytes, both in PEM format. It is ignored if + ``api_mtls_endpoint`` is None. + ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials + for the grpc channel. It is ignored if ``channel`` is provided. + client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): + A callback to provide client certificate bytes and private key bytes, + both in PEM format. It is used to configure a mutual TLS channel. It is + ignored if ``channel`` or ``ssl_channel_credentials`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + + Raises: + google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport + creation failed for any reason. + google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` + and ``credentials_file`` are passed. + """ + self._grpc_channel = None + self._ssl_channel_credentials = ssl_channel_credentials + self._stubs: Dict[str, Callable] = {} + self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None + + if api_mtls_endpoint: + warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) + if client_cert_source: + warnings.warn("client_cert_source is deprecated", DeprecationWarning) + + if channel: + # Ignore credentials if a channel was passed. + credentials = False + # If a channel was explicitly provided, set it. + self._grpc_channel = channel + self._ssl_channel_credentials = None + else: + if api_mtls_endpoint: + host = api_mtls_endpoint + + # Create SSL credentials with client_cert_source or application + # default SSL credentials. + if client_cert_source: + cert, key = client_cert_source() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + else: + self._ssl_channel_credentials = SslCredentials().ssl_credentials + + else: + if client_cert_source_for_mtls and not ssl_channel_credentials: + cert, key = client_cert_source_for_mtls() + self._ssl_channel_credentials = grpc.ssl_channel_credentials( + certificate_chain=cert, private_key=key + ) + + # The base transport sets the host, credentials and scopes + super().__init__( + host=host, + credentials=credentials, + credentials_file=credentials_file, + scopes=scopes, + quota_project_id=quota_project_id, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + + if not self._grpc_channel: + self._grpc_channel = type(self).create_channel( + self._host, + # use the credentials which are saved + credentials=self._credentials, + # Set ``credentials_file`` to ``None`` here as + # the credentials that we saved earlier should be used. + credentials_file=None, + scopes=self._scopes, + ssl_credentials=self._ssl_channel_credentials, + quota_project_id=quota_project_id, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Wrap messages. This must be done after self._grpc_channel exists + self._prep_wrapped_messages(client_info) + + @property + def grpc_channel(self) -> aio.Channel: + """Create the channel designed to connect to this service. + + This property caches on the instance; repeated calls return + the same channel. + """ + # Return the channel from cache. + return self._grpc_channel + + @property + def operations_client(self) -> operations_v1.OperationsAsyncClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Quick check: Only create a new client if we do not already have one. + if self._operations_client is None: + self._operations_client = operations_v1.OperationsAsyncClient( + self.grpc_channel + ) + + # Return the client from cache. + return self._operations_client + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the create source method over gRPC. + + Creates a source. + + Returns: + Callable[[~.CreateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_source' not in self._stubs: + self._stubs['create_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', + request_serializer=securitycenter_service.CreateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['create_source'] + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the create finding method over gRPC. + + Creates a finding. The corresponding source must + exist for finding creation to succeed. + + Returns: + Callable[[~.CreateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_finding' not in self._stubs: + self._stubs['create_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', + request_serializer=securitycenter_service.CreateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['create_finding'] + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + Awaitable[gcs_notification_config.NotificationConfig]]: + r"""Return a callable for the create notification config method over gRPC. + + Creates a notification config. + + Returns: + Callable[[~.CreateNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'create_notification_config' not in self._stubs: + self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', + request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['create_notification_config'] + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + Awaitable[empty_pb2.Empty]]: + r"""Return a callable for the delete notification config method over gRPC. + + Deletes a notification config. + + Returns: + Callable[[~.DeleteNotificationConfigRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'delete_notification_config' not in self._stubs: + self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', + request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs['delete_notification_config'] + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the get iam policy method over gRPC. + + Gets the access control policy on the specified + Source. + + Returns: + Callable[[~.GetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_iam_policy' not in self._stubs: + self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', + request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['get_iam_policy'] + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + Awaitable[notification_config.NotificationConfig]]: + r"""Return a callable for the get notification config method over gRPC. + + Gets a notification config. + + Returns: + Callable[[~.GetNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_notification_config' not in self._stubs: + self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', + request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, + response_deserializer=notification_config.NotificationConfig.deserialize, + ) + return self._stubs['get_notification_config'] + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + Awaitable[organization_settings.OrganizationSettings]]: + r"""Return a callable for the get organization settings method over gRPC. + + Gets the settings for an organization. + + Returns: + Callable[[~.GetOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_organization_settings' not in self._stubs: + self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', + request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, + response_deserializer=organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['get_organization_settings'] + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + Awaitable[source.Source]]: + r"""Return a callable for the get source method over gRPC. + + Gets a source. + + Returns: + Callable[[~.GetSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'get_source' not in self._stubs: + self._stubs['get_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', + request_serializer=securitycenter_service.GetSourceRequest.serialize, + response_deserializer=source.Source.deserialize, + ) + return self._stubs['get_source'] + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + Awaitable[securitycenter_service.GroupAssetsResponse]]: + r"""Return a callable for the group assets method over gRPC. + + Filters an organization's assets and groups them by + their specified properties. + + Returns: + Callable[[~.GroupAssetsRequest], + Awaitable[~.GroupAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_assets' not in self._stubs: + self._stubs['group_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', + request_serializer=securitycenter_service.GroupAssetsRequest.serialize, + response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, + ) + return self._stubs['group_assets'] + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + Awaitable[securitycenter_service.GroupFindingsResponse]]: + r"""Return a callable for the group findings method over gRPC. + + Filters an organization or source's findings and groups them by + their specified properties. + + To group across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings, + /v1/folders/{folder_id}/sources/-/findings, + /v1/projects/{project_id}/sources/-/findings + + Returns: + Callable[[~.GroupFindingsRequest], + Awaitable[~.GroupFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'group_findings' not in self._stubs: + self._stubs['group_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', + request_serializer=securitycenter_service.GroupFindingsRequest.serialize, + response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, + ) + return self._stubs['group_findings'] + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + Awaitable[securitycenter_service.ListAssetsResponse]]: + r"""Return a callable for the list assets method over gRPC. + + Lists an organization's assets. + + Returns: + Callable[[~.ListAssetsRequest], + Awaitable[~.ListAssetsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_assets' not in self._stubs: + self._stubs['list_assets'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', + request_serializer=securitycenter_service.ListAssetsRequest.serialize, + response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, + ) + return self._stubs['list_assets'] + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + Awaitable[securitycenter_service.ListFindingsResponse]]: + r"""Return a callable for the list findings method over gRPC. + + Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: + /v1p1beta1/organizations/{organization_id}/sources/-/findings + + Returns: + Callable[[~.ListFindingsRequest], + Awaitable[~.ListFindingsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_findings' not in self._stubs: + self._stubs['list_findings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', + request_serializer=securitycenter_service.ListFindingsRequest.serialize, + response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, + ) + return self._stubs['list_findings'] + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: + r"""Return a callable for the list notification configs method over gRPC. + + Lists notification configs. + + Returns: + Callable[[~.ListNotificationConfigsRequest], + Awaitable[~.ListNotificationConfigsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_notification_configs' not in self._stubs: + self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', + request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, + response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, + ) + return self._stubs['list_notification_configs'] + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + Awaitable[securitycenter_service.ListSourcesResponse]]: + r"""Return a callable for the list sources method over gRPC. + + Lists all sources belonging to an organization. + + Returns: + Callable[[~.ListSourcesRequest], + Awaitable[~.ListSourcesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'list_sources' not in self._stubs: + self._stubs['list_sources'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', + request_serializer=securitycenter_service.ListSourcesRequest.serialize, + response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, + ) + return self._stubs['list_sources'] + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + Awaitable[operations_pb2.Operation]]: + r"""Return a callable for the run asset discovery method over gRPC. + + Runs asset discovery. The discovery is tracked with a + long-running operation. + + This API can only be called with limited frequency for an + organization. If it is called too frequently the caller will + receive a TOO_MANY_REQUESTS error. + + Returns: + Callable[[~.RunAssetDiscoveryRequest], + Awaitable[~.Operation]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'run_asset_discovery' not in self._stubs: + self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', + request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, + response_deserializer=operations_pb2.Operation.FromString, + ) + return self._stubs['run_asset_discovery'] + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + Awaitable[finding.Finding]]: + r"""Return a callable for the set finding state method over gRPC. + + Updates the state of a finding. + + Returns: + Callable[[~.SetFindingStateRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_finding_state' not in self._stubs: + self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', + request_serializer=securitycenter_service.SetFindingStateRequest.serialize, + response_deserializer=finding.Finding.deserialize, + ) + return self._stubs['set_finding_state'] + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + Awaitable[policy_pb2.Policy]]: + r"""Return a callable for the set iam policy method over gRPC. + + Sets the access control policy on the specified + Source. + + Returns: + Callable[[~.SetIamPolicyRequest], + Awaitable[~.Policy]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'set_iam_policy' not in self._stubs: + self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', + request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, + response_deserializer=policy_pb2.Policy.FromString, + ) + return self._stubs['set_iam_policy'] + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: + r"""Return a callable for the test iam permissions method over gRPC. + + Returns the permissions that a caller has on the + specified source. + + Returns: + Callable[[~.TestIamPermissionsRequest], + Awaitable[~.TestIamPermissionsResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'test_iam_permissions' not in self._stubs: + self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', + request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, + response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, + ) + return self._stubs['test_iam_permissions'] + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + Awaitable[gcs_finding.Finding]]: + r"""Return a callable for the update finding method over gRPC. + + Creates or updates a finding. The corresponding + source must exist for a finding creation to succeed. + + Returns: + Callable[[~.UpdateFindingRequest], + Awaitable[~.Finding]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_finding' not in self._stubs: + self._stubs['update_finding'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', + request_serializer=securitycenter_service.UpdateFindingRequest.serialize, + response_deserializer=gcs_finding.Finding.deserialize, + ) + return self._stubs['update_finding'] + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + Awaitable[gcs_notification_config.NotificationConfig]]: + r"""Return a callable for the update notification config method over gRPC. + + Updates a notification config. The following update fields are + allowed: description, pubsub_topic, streaming_config.filter + + Returns: + Callable[[~.UpdateNotificationConfigRequest], + Awaitable[~.NotificationConfig]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_notification_config' not in self._stubs: + self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', + request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, + response_deserializer=gcs_notification_config.NotificationConfig.deserialize, + ) + return self._stubs['update_notification_config'] + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + Awaitable[gcs_organization_settings.OrganizationSettings]]: + r"""Return a callable for the update organization settings method over gRPC. + + Updates an organization's settings. + + Returns: + Callable[[~.UpdateOrganizationSettingsRequest], + Awaitable[~.OrganizationSettings]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_organization_settings' not in self._stubs: + self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', + request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, + response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, + ) + return self._stubs['update_organization_settings'] + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + Awaitable[gcs_source.Source]]: + r"""Return a callable for the update source method over gRPC. + + Updates a source. + + Returns: + Callable[[~.UpdateSourceRequest], + Awaitable[~.Source]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_source' not in self._stubs: + self._stubs['update_source'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', + request_serializer=securitycenter_service.UpdateSourceRequest.serialize, + response_deserializer=gcs_source.Source.deserialize, + ) + return self._stubs['update_source'] + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + Awaitable[gcs_security_marks.SecurityMarks]]: + r"""Return a callable for the update security marks method over gRPC. + + Updates security marks. + + Returns: + Callable[[~.UpdateSecurityMarksRequest], + Awaitable[~.SecurityMarks]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if 'update_security_marks' not in self._stubs: + self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( + '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', + request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, + response_deserializer=gcs_security_marks.SecurityMarks.deserialize, + ) + return self._stubs['update_security_marks'] + + def close(self): + return self.grpc_channel.close() + + +__all__ = ( + 'SecurityCenterGrpcAsyncIOTransport', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py new file mode 100644 index 00000000..bdf7e4a6 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py @@ -0,0 +1,3232 @@ +# -*- 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. +# + +from google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from google.api_core import operations_v1 +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore + +from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class SecurityCenterRestInterceptor: + """Interceptor for SecurityCenter. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the SecurityCenterRestTransport. + + .. code-block:: python + class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): + def pre_create_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_create_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_delete_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def pre_get_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_get_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_source(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_group_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_group_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_assets(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_assets(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_findings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_findings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_notification_configs(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_notification_configs(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_sources(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_sources(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_run_asset_discovery(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_run_asset_discovery(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_finding_state(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_finding_state(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_set_iam_policy(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_iam_policy(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_test_iam_permissions(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_test_iam_permissions(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_finding(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_finding(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_notification_config(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_notification_config(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_organization_settings(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_organization_settings(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_security_marks(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_marks(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_update_source(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_source(self, response): + logging.log(f"Received response: {response}") + return response + + transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) + client = SecurityCenterClient(transport=transport) + + + """ + def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for create_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: + """Post-rpc interceptor for create_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for create_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for create_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: + """Post-rpc interceptor for get_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: + """Post-rpc interceptor for get_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_source(self, response: source.Source) -> source.Source: + """Post-rpc interceptor for get_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: + """Post-rpc interceptor for group_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for group_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: + """Post-rpc interceptor for group_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_assets + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: + """Post-rpc interceptor for list_assets + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_findings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: + """Post-rpc interceptor for list_findings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_notification_configs + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: + """Post-rpc interceptor for list_notification_configs + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list_sources + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: + """Post-rpc interceptor for list_sources + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: + """Post-rpc interceptor for run_asset_discovery + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: + """Post-rpc interceptor for set_finding_state + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: + """Post-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: + """Post-rpc interceptor for test_iam_permissions + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_finding + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: + """Post-rpc interceptor for update_finding + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_notification_config + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: + """Post-rpc interceptor for update_notification_config + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: + """Post-rpc interceptor for update_organization_settings + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: + """Post-rpc interceptor for update_security_marks + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for update_source + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: + """Post-rpc interceptor for update_source + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class SecurityCenterRestStub: + _session: AuthorizedSession + _host: str + _interceptor: SecurityCenterRestInterceptor + + +class SecurityCenterRestTransport(SecurityCenterTransport): + """REST backend transport for SecurityCenter. + + V1p1Beta1 APIs for Security Center service. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + """ + + def __init__(self, *, + host: str = 'securitycenter.googleapis.com', + credentials: Optional[ga_credentials.Credentials] = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + client_cert_source_for_mtls: Optional[Callable[[ + ], Tuple[bytes, bytes]]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = 'https', + interceptor: Optional[SecurityCenterRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST) + self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or SecurityCenterRestInterceptor() + self._prep_wrapped_messages(client_info) + + @property + def operations_client(self) -> operations_v1.AbstractOperationsClient: + """Create the client designed to process long-running operations. + + This property caches on the instance; repeated calls return the same + client. + """ + # Only create a new client if we do not already have one. + if self._operations_client is None: + http_options: Dict[str, List[Dict[str, str]]] = { + 'google.longrunning.Operations.CancelOperation': [ + { + 'method': 'post', + 'uri': '/v1p1beta1/{name=organizations/*/operations/*}:cancel', + 'body': '*', + }, + ], + 'google.longrunning.Operations.DeleteOperation': [ + { + 'method': 'delete', + 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.GetOperation': [ + { + 'method': 'get', + 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', + }, + ], + 'google.longrunning.Operations.ListOperations': [ + { + 'method': 'get', + 'uri': '/v1p1beta1/{name=organizations/*/operations}', + }, + ], + } + + rest_transport = operations_v1.OperationsRestTransport( + host=self._host, + # use the credentials which are saved + credentials=self._credentials, + scopes=self._scopes, + http_options=http_options, + path_prefix="v1p1beta1") + + self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) + + # Return the client from cache. + return self._operations_client + + class _CreateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "findingId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the create finding method over HTTP. + + Args: + request (~.securitycenter_service.CreateFindingRequest): + The request object. Request message for creating a + finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_create_finding(request, metadata) + pb_request = securitycenter_service.CreateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_finding(resp) + return resp + + class _CreateNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + "configId" : "", } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_notification_config.NotificationConfig: + r"""Call the create notification + config method over HTTP. + + Args: + request (~.securitycenter_service.CreateNotificationConfigRequest): + The request object. Request message for creating a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_notification_config.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', + 'body': 'notification_config', + }, + ] + request, metadata = self._interceptor.pre_create_notification_config(request, metadata) + pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_notification_config.NotificationConfig() + pb_resp = gcs_notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_notification_config(resp) + return resp + + class _CreateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("CreateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.CreateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the create source method over HTTP. + + Args: + request (~.securitycenter_service.CreateSourceRequest): + The request object. Request message for creating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*}/sources', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_create_source(request, metadata) + pb_request = securitycenter_service.CreateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_source(resp) + return resp + + class _DeleteNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.DeleteNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ): + r"""Call the delete notification + config method over HTTP. + + Args: + request (~.securitycenter_service.DeleteNotificationConfigRequest): + The request object. Request message for deleting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'delete', + 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) + pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + class _GetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("GetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.GetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the get iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.GetIamPolicyRequest): + The request object. Request message for ``GetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_iam_policy(resp) + return resp + + class _GetNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("GetNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> notification_config.NotificationConfig: + r"""Call the get notification config method over HTTP. + + Args: + request (~.securitycenter_service.GetNotificationConfigRequest): + The request object. Request message for getting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.notification_config.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', + }, + ] + request, metadata = self._interceptor.pre_get_notification_config(request, metadata) + pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = notification_config.NotificationConfig() + pb_resp = notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_notification_config(resp) + return resp + + class _GetOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("GetOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> organization_settings.OrganizationSettings: + r"""Call the get organization settings method over HTTP. + + Args: + request (~.securitycenter_service.GetOrganizationSettingsRequest): + The request object. Request message for getting + organization settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{name=organizations/*/organizationSettings}', + }, + ] + request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) + pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = organization_settings.OrganizationSettings() + pb_resp = organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_organization_settings(resp) + return resp + + class _GetSource(SecurityCenterRestStub): + def __hash__(self): + return hash("GetSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GetSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> source.Source: + r"""Call the get source method over HTTP. + + Args: + request (~.securitycenter_service.GetSourceRequest): + The request object. Request message for getting a source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{name=organizations/*/sources/*}', + }, + ] + request, metadata = self._interceptor.pre_get_source(request, metadata) + pb_request = securitycenter_service.GetSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = source.Source() + pb_resp = source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_source(resp) + return resp + + class _GroupAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupAssetsResponse: + r"""Call the group assets method over HTTP. + + Args: + request (~.securitycenter_service.GroupAssetsRequest): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupAssetsResponse: + Response message for grouping by + assets. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*}/assets:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=folders/*}/assets:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=projects/*}/assets:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_assets(request, metadata) + pb_request = securitycenter_service.GroupAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupAssetsResponse() + pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_assets(resp) + return resp + + class _GroupFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("GroupFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.GroupFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.GroupFindingsResponse: + r"""Call the group findings method over HTTP. + + Args: + request (~.securitycenter_service.GroupFindingsRequest): + The request object. Request message for grouping by + findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.GroupFindingsResponse: + Response message for group by + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings:group', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings:group', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_group_findings(request, metadata) + pb_request = securitycenter_service.GroupFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.GroupFindingsResponse() + pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_group_findings(resp) + return resp + + class _ListAssets(SecurityCenterRestStub): + def __hash__(self): + return hash("ListAssets") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListAssetsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListAssetsResponse: + r"""Call the list assets method over HTTP. + + Args: + request (~.securitycenter_service.ListAssetsRequest): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListAssetsResponse: + Response message for listing assets. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=organizations/*}/assets', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=folders/*}/assets', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=projects/*}/assets', + }, + ] + request, metadata = self._interceptor.pre_list_assets(request, metadata) + pb_request = securitycenter_service.ListAssetsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListAssetsResponse() + pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_assets(resp) + return resp + + class _ListFindings(SecurityCenterRestStub): + def __hash__(self): + return hash("ListFindings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListFindingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListFindingsResponse: + r"""Call the list findings method over HTTP. + + Args: + request (~.securitycenter_service.ListFindingsRequest): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListFindingsResponse: + Response message for listing + findings. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings', + }, + ] + request, metadata = self._interceptor.pre_list_findings(request, metadata) + pb_request = securitycenter_service.ListFindingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListFindingsResponse() + pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_findings(resp) + return resp + + class _ListNotificationConfigs(SecurityCenterRestStub): + def __hash__(self): + return hash("ListNotificationConfigs") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListNotificationConfigsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListNotificationConfigsResponse: + r"""Call the list notification configs method over HTTP. + + Args: + request (~.securitycenter_service.ListNotificationConfigsRequest): + The request object. Request message for listing + notification configs. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListNotificationConfigsResponse: + Response message for listing + notification configs. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', + }, + ] + request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) + pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListNotificationConfigsResponse() + pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_notification_configs(resp) + return resp + + class _ListSources(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSources") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.ListSourcesRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> securitycenter_service.ListSourcesResponse: + r"""Call the list sources method over HTTP. + + Args: + request (~.securitycenter_service.ListSourcesRequest): + The request object. Request message for listing sources. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSourcesResponse: + Response message for listing sources. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=organizations/*}/sources', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=folders/*}/sources', + }, +{ + 'method': 'get', + 'uri': '/v1p1beta1/{parent=projects/*}/sources', + }, + ] + request, metadata = self._interceptor.pre_list_sources(request, metadata) + pb_request = securitycenter_service.ListSourcesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListSourcesResponse() + pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_sources(resp) + return resp + + class _RunAssetDiscovery(SecurityCenterRestStub): + def __hash__(self): + return hash("RunAssetDiscovery") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.RunAssetDiscoveryRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> operations_pb2.Operation: + r"""Call the run asset discovery method over HTTP. + + Args: + request (~.securitycenter_service.RunAssetDiscoveryRequest): + The request object. Request message for running asset + discovery for an organization. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.operations_pb2.Operation: + This resource represents a + long-running operation that is the + result of a network API call. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{parent=organizations/*}/assets:runDiscovery', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) + pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = operations_pb2.Operation() + json_format.Parse(response.content, resp, ignore_unknown_fields=True) + resp = self._interceptor.post_run_asset_discovery(resp) + return resp + + class _SetFindingState(SecurityCenterRestStub): + def __hash__(self): + return hash("SetFindingState") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.SetFindingStateRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> finding.Finding: + r"""Call the set finding state method over HTTP. + + Args: + request (~.securitycenter_service.SetFindingStateRequest): + The request object. Request message for updating a + finding's state. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{name=folders/*/sources/*/findings/*}:setState', + 'body': '*', + }, +{ + 'method': 'post', + 'uri': '/v1p1beta1/{name=projects/*/sources/*/findings/*}:setState', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_finding_state(request, metadata) + pb_request = securitycenter_service.SetFindingStateRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = finding.Finding() + pb_resp = finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_finding_state(resp) + return resp + + class _SetIamPolicy(SecurityCenterRestStub): + def __hash__(self): + return hash("SetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.SetIamPolicyRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> policy_pb2.Policy: + r"""Call the set iam policy method over HTTP. + + Args: + request (~.iam_policy_pb2.SetIamPolicyRequest): + The request object. Request message for ``SetIamPolicy`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.policy_pb2.Policy: + An Identity and Access Management (IAM) policy, which + specifies access controls for Google Cloud resources. + + A ``Policy`` is a collection of ``bindings``. A + ``binding`` binds one or more ``members``, or + principals, to a single ``role``. Principals can be user + accounts, service accounts, Google groups, and domains + (such as G Suite). A ``role`` is a named list of + permissions; each ``role`` can be an IAM predefined role + or a user-created custom role. + + For some types of Google Cloud resources, a ``binding`` + can also specify a ``condition``, which is a logical + expression that allows access to a resource only if the + expression evaluates to ``true``. A condition can add + constraints based on attributes of the request, the + resource, or both. To learn which resources support + conditions in their IAM policies, see the `IAM + documentation `__. + + **JSON example:** + + :: + + { + "bindings": [ + { + "role": "roles/resourcemanager.organizationAdmin", + "members": [ + "user:mike@example.com", + "group:admins@example.com", + "domain:google.com", + "serviceAccount:my-project-id@appspot.gserviceaccount.com" + ] + }, + { + "role": "roles/resourcemanager.organizationViewer", + "members": [ + "user:eve@example.com" + ], + "condition": { + "title": "expirable access", + "description": "Does not grant access after Sep 2020", + "expression": "request.time < + timestamp('2020-10-01T00:00:00.000Z')", + } + } + ], + "etag": "BwWWja0YfJA=", + "version": 3 + } + + **YAML example:** + + :: + + bindings: + - members: + - user:mike@example.com + - group:admins@example.com + - domain:google.com + - serviceAccount:my-project-id@appspot.gserviceaccount.com + role: roles/resourcemanager.organizationAdmin + - members: + - user:eve@example.com + role: roles/resourcemanager.organizationViewer + condition: + title: expirable access + description: Does not grant access after Sep 2020 + expression: request.time < timestamp('2020-10-01T00:00:00.000Z') + etag: BwWWja0YfJA= + version: 3 + + For a description of IAM and its features, see the `IAM + documentation `__. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = policy_pb2.Policy() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_iam_policy(resp) + return resp + + class _TestIamPermissions(SecurityCenterRestStub): + def __hash__(self): + return hash("TestIamPermissions") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: iam_policy_pb2.TestIamPermissionsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> iam_policy_pb2.TestIamPermissionsResponse: + r"""Call the test iam permissions method over HTTP. + + Args: + request (~.iam_policy_pb2.TestIamPermissionsRequest): + The request object. Request message for ``TestIamPermissions`` method. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.iam_policy_pb2.TestIamPermissionsResponse: + Response message for ``TestIamPermissions`` method. + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'post', + 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions', + 'body': '*', + }, + ] + request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) + pb_request = request + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = iam_policy_pb2.TestIamPermissionsResponse() + pb_resp = resp + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_test_iam_permissions(resp) + return resp + + class _UpdateFinding(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateFinding") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateFindingRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_finding.Finding: + r"""Call the update finding method over HTTP. + + Args: + request (~.securitycenter_service.UpdateFindingRequest): + The request object. Request message for updating or + creating a finding. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_finding.Finding: + Security Command Center finding. + A finding is a record of assessment data + (security, risk, health or privacy) + ingested into Security Command Center + for presentation, notification, + analysis, policy testing, and + enforcement. For example, an XSS + vulnerability in an App Engine + application is a finding. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}', + 'body': 'finding', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{finding.name=folders/*/sources/*/findings/*}', + 'body': 'finding', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{finding.name=projects/*/sources/*/findings/*}', + 'body': 'finding', + }, + ] + request, metadata = self._interceptor.pre_update_finding(request, metadata) + pb_request = securitycenter_service.UpdateFindingRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_finding.Finding() + pb_resp = gcs_finding.Finding.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_finding(resp) + return resp + + class _UpdateNotificationConfig(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateNotificationConfig") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateNotificationConfigRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_notification_config.NotificationConfig: + r"""Call the update notification + config method over HTTP. + + Args: + request (~.securitycenter_service.UpdateNotificationConfigRequest): + The request object. Request message for updating a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_notification_config.NotificationConfig: + Security Command Center notification + configs. + A notification config is a Security + Command Center resource that contains + the configuration to send notifications + for create/update events of findings, + assets and etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}', + 'body': 'notification_config', + }, + ] + request, metadata = self._interceptor.pre_update_notification_config(request, metadata) + pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_notification_config.NotificationConfig() + pb_resp = gcs_notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_notification_config(resp) + return resp + + class _UpdateOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateOrganizationSettingsRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_organization_settings.OrganizationSettings: + r"""Call the update organization + settings method over HTTP. + + Args: + request (~.securitycenter_service.UpdateOrganizationSettingsRequest): + The request object. Request message for updating an + organization's settings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}', + 'body': 'organization_settings', + }, + ] + request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) + pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_organization_settings.OrganizationSettings() + pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_organization_settings(resp) + return resp + + class _UpdateSecurityMarks(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityMarks") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSecurityMarksRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_security_marks.SecurityMarks: + r"""Call the update security marks method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityMarksRequest): + The request object. Request message for updating a + SecurityMarks resource. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_marks.SecurityMarks: + User specified security marks that + are attached to the parent Security + Command Center resource. Security marks + are scoped within a Security Command + Center organization -- they can be + modified and viewed by all users who + have proper permissions on the + organization. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=folders/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=projects/*/assets/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, +{ + 'method': 'patch', + 'uri': '/v1p1beta1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', + 'body': 'security_marks', + }, + ] + request, metadata = self._interceptor.pre_update_security_marks(request, metadata) + pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_security_marks.SecurityMarks() + pb_resp = gcs_security_marks.SecurityMarks.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_security_marks(resp) + return resp + + class _UpdateSource(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSource") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { + } + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} + + def __call__(self, + request: securitycenter_service.UpdateSourceRequest, *, + retry: OptionalRetry=gapic_v1.method.DEFAULT, + timeout: Optional[float]=None, + metadata: Sequence[Tuple[str, str]]=(), + ) -> gcs_source.Source: + r"""Call the update source method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSourceRequest): + The request object. Request message for updating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, etc. + + """ + + http_options: List[Dict[str, str]] = [{ + 'method': 'patch', + 'uri': '/v1p1beta1/{source.name=organizations/*/sources/*}', + 'body': 'source', + }, + ] + request, metadata = self._interceptor.pre_update_source(request, metadata) + pb_request = securitycenter_service.UpdateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request['body'], + including_default_value_fields=False, + use_integers_for_enums=True + ) + uri = transcoded_request['uri'] + method = transcoded_request['method'] + + # Jsonify the query params + query_params = json.loads(json_format.MessageToJson( + transcoded_request['query_params'], + including_default_value_fields=False, + use_integers_for_enums=True, + )) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers['Content-Type'] = 'application/json' + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_update_source(resp) + return resp + + @property + def create_finding(self) -> Callable[ + [securitycenter_service.CreateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_notification_config(self) -> Callable[ + [securitycenter_service.CreateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def create_source(self) -> Callable[ + [securitycenter_service.CreateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def delete_notification_config(self) -> Callable[ + [securitycenter_service.DeleteNotificationConfigRequest], + empty_pb2.Empty]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_iam_policy(self) -> Callable[ + [iam_policy_pb2.GetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_notification_config(self) -> Callable[ + [securitycenter_service.GetNotificationConfigRequest], + notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_organization_settings(self) -> Callable[ + [securitycenter_service.GetOrganizationSettingsRequest], + organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def get_source(self) -> Callable[ + [securitycenter_service.GetSourceRequest], + source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_assets(self) -> Callable[ + [securitycenter_service.GroupAssetsRequest], + securitycenter_service.GroupAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def group_findings(self) -> Callable[ + [securitycenter_service.GroupFindingsRequest], + securitycenter_service.GroupFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_assets(self) -> Callable[ + [securitycenter_service.ListAssetsRequest], + securitycenter_service.ListAssetsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_findings(self) -> Callable[ + [securitycenter_service.ListFindingsRequest], + securitycenter_service.ListFindingsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_notification_configs(self) -> Callable[ + [securitycenter_service.ListNotificationConfigsRequest], + securitycenter_service.ListNotificationConfigsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_sources(self) -> Callable[ + [securitycenter_service.ListSourcesRequest], + securitycenter_service.ListSourcesResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSources(self._session, self._host, self._interceptor) # type: ignore + + @property + def run_asset_discovery(self) -> Callable[ + [securitycenter_service.RunAssetDiscoveryRequest], + operations_pb2.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_finding_state(self) -> Callable[ + [securitycenter_service.SetFindingStateRequest], + finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore + + @property + def set_iam_policy(self) -> Callable[ + [iam_policy_pb2.SetIamPolicyRequest], + policy_pb2.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + + @property + def test_iam_permissions(self) -> Callable[ + [iam_policy_pb2.TestIamPermissionsRequest], + iam_policy_pb2.TestIamPermissionsResponse]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_finding(self) -> Callable[ + [securitycenter_service.UpdateFindingRequest], + gcs_finding.Finding]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_notification_config(self) -> Callable[ + [securitycenter_service.UpdateNotificationConfigRequest], + gcs_notification_config.NotificationConfig]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_organization_settings(self) -> Callable[ + [securitycenter_service.UpdateOrganizationSettingsRequest], + gcs_organization_settings.OrganizationSettings]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_security_marks(self) -> Callable[ + [securitycenter_service.UpdateSecurityMarksRequest], + gcs_security_marks.SecurityMarks]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore + + @property + def update_source(self) -> Callable[ + [securitycenter_service.UpdateSourceRequest], + gcs_source.Source]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__=( + 'SecurityCenterRestTransport', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py new file mode 100644 index 00000000..ec6cbc99 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py @@ -0,0 +1,114 @@ +# -*- 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. +# +from .asset import ( + Asset, +) +from .finding import ( + Finding, +) +from .folder import ( + Folder, +) +from .notification_config import ( + NotificationConfig, +) +from .notification_message import ( + NotificationMessage, +) +from .organization_settings import ( + OrganizationSettings, +) +from .resource import ( + Resource, +) +from .run_asset_discovery_response import ( + RunAssetDiscoveryResponse, +) +from .security_marks import ( + SecurityMarks, +) +from .securitycenter_service import ( + CreateFindingRequest, + CreateNotificationConfigRequest, + CreateSourceRequest, + DeleteNotificationConfigRequest, + GetNotificationConfigRequest, + GetOrganizationSettingsRequest, + GetSourceRequest, + GroupAssetsRequest, + GroupAssetsResponse, + GroupFindingsRequest, + GroupFindingsResponse, + GroupResult, + ListAssetsRequest, + ListAssetsResponse, + ListFindingsRequest, + ListFindingsResponse, + ListNotificationConfigsRequest, + ListNotificationConfigsResponse, + ListSourcesRequest, + ListSourcesResponse, + RunAssetDiscoveryRequest, + SetFindingStateRequest, + UpdateFindingRequest, + UpdateNotificationConfigRequest, + UpdateOrganizationSettingsRequest, + UpdateSecurityMarksRequest, + UpdateSourceRequest, +) +from .source import ( + Source, +) + +__all__ = ( + 'Asset', + 'Finding', + 'Folder', + 'NotificationConfig', + 'NotificationMessage', + 'OrganizationSettings', + 'Resource', + 'RunAssetDiscoveryResponse', + 'SecurityMarks', + 'CreateFindingRequest', + 'CreateNotificationConfigRequest', + 'CreateSourceRequest', + 'DeleteNotificationConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'RunAssetDiscoveryRequest', + 'SetFindingStateRequest', + 'UpdateFindingRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSecurityMarksRequest', + 'UpdateSourceRequest', + 'Source', +) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py new file mode 100644 index 00000000..d61c427b --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py @@ -0,0 +1,227 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import folder +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'Asset', + }, +) + + +class Asset(proto.Message): + r"""Security Command Center representation of a Google Cloud + resource. + + The Asset is a Security Command Center resource that captures + information about a single Google Cloud resource. All + modifications to an Asset are only within the context of + Security Command Center and don't affect the referenced Google + Cloud resource. + + Attributes: + name (str): + The relative resource name of this asset. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/assets/{asset_id}". + security_center_properties (google.cloud.securitycenter_v1p1beta1.types.Asset.SecurityCenterProperties): + Security Command Center managed properties. + These properties are managed by Security Command + Center and cannot be modified by the user. + resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Resource managed properties. These properties + are managed and defined by the Google Cloud + resource and cannot be modified by the user. + security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): + User specified security marks. These marks + are entirely managed by the user and come from + the SecurityMarks resource that belongs to the + asset. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was created in + Security Command Center. + update_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the asset was last updated + or added in Cloud SCC. + iam_policy (google.cloud.securitycenter_v1p1beta1.types.Asset.IamPolicy): + Cloud IAM Policy information associated with + the Google Cloud resource described by the + Security Command Center asset. This information + is managed and defined by the Google Cloud + resource and cannot be modified by the user. + canonical_name (str): + The canonical name of the resource. It's either + "organizations/{organization_id}/assets/{asset_id}", + "folders/{folder_id}/assets/{asset_id}" or + "projects/{project_number}/assets/{asset_id}", depending on + the closest CRM ancestor of the resource. + """ + + class SecurityCenterProperties(proto.Message): + r"""Security Command Center managed properties. These properties + are managed by Security Command Center and cannot be modified by + the user. + + Attributes: + resource_name (str): + The full resource name of the Google Cloud resource this + asset represents. This field is immutable after create time. + See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_type (str): + The type of the Google Cloud resource. + Examples include: APPLICATION, PROJECT, and + ORGANIZATION. This is a case insensitive field + defined by Security Command Center and/or the + producer of the resource and is immutable after + create time. + resource_parent (str): + The full resource name of the immediate parent of the + resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_project (str): + The full resource name of the project the resource belongs + to. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_owners (MutableSequence[str]): + Owners of the Google Cloud resource. + resource_display_name (str): + The user defined display name for this + resource. + resource_parent_display_name (str): + The user defined display name for the parent + of this resource. + resource_project_display_name (str): + The user defined display name for the project + of this resource. + folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): + Contains a Folder message for each folder in + the assets ancestry. The first folder is the + deepest nested folder, and the last folder is + the folder directly under the Organization. + """ + + resource_name: str = proto.Field( + proto.STRING, + number=1, + ) + resource_type: str = proto.Field( + proto.STRING, + number=2, + ) + resource_parent: str = proto.Field( + proto.STRING, + number=3, + ) + resource_project: str = proto.Field( + proto.STRING, + number=4, + ) + resource_owners: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=5, + ) + resource_display_name: str = proto.Field( + proto.STRING, + number=6, + ) + resource_parent_display_name: str = proto.Field( + proto.STRING, + number=7, + ) + resource_project_display_name: str = proto.Field( + proto.STRING, + number=8, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=10, + message=folder.Folder, + ) + + class IamPolicy(proto.Message): + r"""Cloud IAM Policy information associated with the Google Cloud + resource described by the Security Command Center asset. This + information is managed and defined by the Google Cloud resource + and cannot be modified by the user. + + Attributes: + policy_blob (str): + The JSON representation of the Policy + associated with the asset. See + https://cloud.google.com/iam/docs/reference/rest/v1/Policy + for format details. + """ + + policy_blob: str = proto.Field( + proto.STRING, + number=1, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + security_center_properties: SecurityCenterProperties = proto.Field( + proto.MESSAGE, + number=2, + message=SecurityCenterProperties, + ) + resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + update_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + iam_policy: IamPolicy = proto.Field( + proto.MESSAGE, + number=11, + message=IamPolicy, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=13, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py new file mode 100644 index 00000000..e74ce6ab --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py @@ -0,0 +1,208 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'Finding', + }, +) + + +class Finding(proto.Message): + r"""Security Command Center finding. + A finding is a record of assessment data (security, risk, health + or privacy) ingested into Security Command Center for + presentation, notification, analysis, policy testing, and + enforcement. For example, an XSS vulnerability in an App Engine + application is a finding. + + Attributes: + name (str): + The relative resource name of this finding. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". + parent (str): + The relative resource name of the source the finding belongs + to. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + This field is immutable after creation time. For example: + "organizations/{organization_id}/sources/{source_id}". + resource_name (str): + For findings on Google Cloud resources, the full resource + name of the Google Cloud resource this finding is for. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + When the finding is for a non-Google Cloud resource, the + resourceName can be a customer or partner defined string. + This field is immutable after creation time. + state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): + The state of the finding. + category (str): + The additional taxonomy group within findings from a given + source. This field is immutable after creation time. + Example: "XSS_FLASH_INJECTION". + external_uri (str): + The URI that, if available, points to a web + page outside of Security Command Center where + additional information about the finding can be + found. This field is guaranteed to be either + empty or a well formed URL. + source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Source specific properties. These properties are managed by + the source that writes the finding. The key names in the + source_properties map must be between 1 and 255 characters, + and must start with a letter and contain alphanumeric + characters or underscores only. + security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): + Output only. User specified security marks. + These marks are entirely managed by the user and + come from the SecurityMarks resource that + belongs to the finding. + event_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the event took place, or + when an update to the finding occurred. For + example, if the finding represents an open + firewall it would capture the time the detector + believes the firewall became open. The accuracy + is determined by the detector. If the finding + were to be resolved afterward, this time would + reflect when the finding was resolved. Must not + be set to a value greater than the current + timestamp. + create_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the finding was created in + Security Command Center. + severity (google.cloud.securitycenter_v1p1beta1.types.Finding.Severity): + The severity of the finding. This field is + managed by the source that writes the finding. + canonical_name (str): + The canonical name of the finding. It's either + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" + or + "projects/{project_number}/sources/{source_id}/findings/{finding_id}", + depending on the closest CRM ancestor of the resource + associated with the finding. + """ + class State(proto.Enum): + r"""The state of the finding. + + Values: + STATE_UNSPECIFIED (0): + Unspecified state. + ACTIVE (1): + The finding requires attention and has not + been addressed yet. + INACTIVE (2): + The finding has been fixed, triaged as a + non-issue or otherwise addressed and is no + longer active. + """ + STATE_UNSPECIFIED = 0 + ACTIVE = 1 + INACTIVE = 2 + + class Severity(proto.Enum): + r"""The severity of the finding. This field is managed by the + source that writes the finding. + + Values: + SEVERITY_UNSPECIFIED (0): + No severity specified. The default value. + CRITICAL (1): + Critical severity. + HIGH (2): + High severity. + MEDIUM (3): + Medium severity. + LOW (4): + Low severity. + """ + SEVERITY_UNSPECIFIED = 0 + CRITICAL = 1 + HIGH = 2 + MEDIUM = 3 + LOW = 4 + + name: str = proto.Field( + proto.STRING, + number=1, + ) + parent: str = proto.Field( + proto.STRING, + number=2, + ) + resource_name: str = proto.Field( + proto.STRING, + number=3, + ) + state: State = proto.Field( + proto.ENUM, + number=4, + enum=State, + ) + category: str = proto.Field( + proto.STRING, + number=5, + ) + external_uri: str = proto.Field( + proto.STRING, + number=6, + ) + source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=7, + message=struct_pb2.Value, + ) + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=8, + message=gcs_security_marks.SecurityMarks, + ) + event_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=9, + message=timestamp_pb2.Timestamp, + ) + create_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=10, + message=timestamp_pb2.Timestamp, + ) + severity: Severity = proto.Field( + proto.ENUM, + number=13, + enum=Severity, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=14, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py new file mode 100644 index 00000000..81667385 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py @@ -0,0 +1,54 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'Folder', + }, +) + + +class Folder(proto.Message): + r"""Message that contains the resource name and display name of a + folder resource. + + Attributes: + resource_folder (str): + Full resource name of this folder. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + resource_folder_display_name (str): + The user defined display name for this + folder. + """ + + resource_folder: str = proto.Field( + proto.STRING, + number=1, + ) + resource_folder_display_name: str = proto.Field( + proto.STRING, + number=2, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py new file mode 100644 index 00000000..a4e12bfe --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py @@ -0,0 +1,142 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'NotificationConfig', + }, +) + + +class NotificationConfig(proto.Message): + r"""Security Command Center notification configs. + A notification config is a Security Command Center resource that + contains the configuration to send notifications for + create/update events of findings, assets and etc. + + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + name (str): + The relative resource name of this notification config. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/notificationConfigs/notify_public_bucket". + description (str): + The description of the notification config + (max of 1024 characters). + event_type (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.EventType): + The type of events the config is for, e.g. + FINDING. + pubsub_topic (str): + The Pub/Sub topic to send notifications to. Its format is + "projects/[project_id]/topics/[topic]". + service_account (str): + Output only. The service account that needs + "pubsub.topics.publish" permission to publish to + the Pub/Sub topic. + streaming_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.StreamingConfig): + The config for triggering streaming-based + notifications. + + This field is a member of `oneof`_ ``notify_config``. + """ + class EventType(proto.Enum): + r"""The type of events. + + Values: + EVENT_TYPE_UNSPECIFIED (0): + Unspecified event type. + FINDING (1): + Events for findings. + """ + EVENT_TYPE_UNSPECIFIED = 0 + FINDING = 1 + + class StreamingConfig(proto.Message): + r"""The config for streaming-based notifications, which send each + event as soon as it is detected. + + Attributes: + filter (str): + Expression that defines the filter to apply across + create/update events of assets or findings as specified by + the event type. The expression is a list of zero or more + restrictions combined via logical operators ``AND`` and + ``OR``. Parentheses are supported, and ``OR`` has higher + precedence than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the + corresponding resource. + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + """ + + filter: str = proto.Field( + proto.STRING, + number=1, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + description: str = proto.Field( + proto.STRING, + number=2, + ) + event_type: EventType = proto.Field( + proto.ENUM, + number=3, + enum=EventType, + ) + pubsub_topic: str = proto.Field( + proto.STRING, + number=4, + ) + service_account: str = proto.Field( + proto.STRING, + number=5, + ) + streaming_config: StreamingConfig = proto.Field( + proto.MESSAGE, + number=6, + oneof='notify_config', + message=StreamingConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py new file mode 100644 index 00000000..a4834ac4 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py @@ -0,0 +1,69 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import resource as gcs_resource + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'NotificationMessage', + }, +) + + +class NotificationMessage(proto.Message): + r"""Security Command Center's Notification + + .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields + + Attributes: + notification_config_name (str): + Name of the notification config that + generated current notification. + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + If it's a Finding based notification config, + this field will be populated. + + This field is a member of `oneof`_ ``event``. + resource (google.cloud.securitycenter_v1p1beta1.types.Resource): + The Cloud resource tied to the notification. + """ + + notification_config_name: str = proto.Field( + proto.STRING, + number=1, + ) + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=2, + oneof='event', + message=gcs_finding.Finding, + ) + resource: gcs_resource.Resource = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_resource.Resource, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py new file mode 100644 index 00000000..0ef9a722 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py @@ -0,0 +1,123 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'OrganizationSettings', + }, +) + + +class OrganizationSettings(proto.Message): + r"""User specified settings that are attached to the Security + Command Center organization. + + Attributes: + name (str): + The relative resource name of the settings. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/organizationSettings". + enable_asset_discovery (bool): + A flag that indicates if Asset Discovery should be enabled. + If the flag is set to ``true``, then discovery of assets + will occur. If it is set to \`false, all historical assets + will remain, but discovery of future assets will not occur. + asset_discovery_config (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig): + The configuration used for Asset Discovery + runs. + """ + + class AssetDiscoveryConfig(proto.Message): + r"""The configuration used for Asset Discovery runs. + + Attributes: + project_ids (MutableSequence[str]): + The project ids to use for filtering asset + discovery. + inclusion_mode (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): + The mode to use for filtering asset + discovery. + folder_ids (MutableSequence[str]): + The folder ids to use for filtering asset + discovery. It consists of only digits, e.g., + 756619654966. + """ + class InclusionMode(proto.Enum): + r"""The mode of inclusion when running Asset Discovery. Asset discovery + can be limited by explicitly identifying projects to be included or + excluded. If INCLUDE_ONLY is set, then only those projects within + the organization and their children are discovered during asset + discovery. If EXCLUDE is set, then projects that don't match those + projects are discovered during asset discovery. If neither are set, + then all projects within the organization are discovered during + asset discovery. + + Values: + INCLUSION_MODE_UNSPECIFIED (0): + Unspecified. Setting the mode with this value + will disable inclusion/exclusion filtering for + Asset Discovery. + INCLUDE_ONLY (1): + Asset Discovery will capture only the + resources within the projects specified. All + other resources will be ignored. + EXCLUDE (2): + Asset Discovery will ignore all resources + under the projects specified. All other + resources will be retrieved. + """ + INCLUSION_MODE_UNSPECIFIED = 0 + INCLUDE_ONLY = 1 + EXCLUDE = 2 + + project_ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=1, + ) + inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( + proto.ENUM, + number=2, + enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', + ) + folder_ids: MutableSequence[str] = proto.RepeatedField( + proto.STRING, + number=3, + ) + + name: str = proto.Field( + proto.STRING, + number=1, + ) + enable_asset_discovery: bool = proto.Field( + proto.BOOL, + number=2, + ) + asset_discovery_config: AssetDiscoveryConfig = proto.Field( + proto.MESSAGE, + number=3, + message=AssetDiscoveryConfig, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py new file mode 100644 index 00000000..907f895c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py @@ -0,0 +1,85 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import folder + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'Resource', + }, +) + + +class Resource(proto.Message): + r"""Information related to the Google Cloud resource. + + Attributes: + name (str): + The full resource name of the resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + project (str): + The full resource name of project that the + resource belongs to. + project_display_name (str): + The human readable name of project that the + resource belongs to. + parent (str): + The full resource name of resource's parent. + parent_display_name (str): + The human readable name of resource's parent. + folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): + Output only. Contains a Folder message for + each folder in the assets ancestry. The first + folder is the deepest nested folder, and the + last folder is the folder directly under the + Organization. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + project: str = proto.Field( + proto.STRING, + number=2, + ) + project_display_name: str = proto.Field( + proto.STRING, + number=3, + ) + parent: str = proto.Field( + proto.STRING, + number=4, + ) + parent_display_name: str = proto.Field( + proto.STRING, + number=5, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=7, + message=folder.Folder, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py new file mode 100644 index 00000000..e1eb6547 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py @@ -0,0 +1,76 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.protobuf import duration_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'RunAssetDiscoveryResponse', + }, +) + + +class RunAssetDiscoveryResponse(proto.Message): + r"""Response of asset discovery run + + Attributes: + state (google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse.State): + The state of an asset discovery run. + duration (google.protobuf.duration_pb2.Duration): + The duration between asset discovery run + start and end + """ + class State(proto.Enum): + r"""The state of an asset discovery run. + + Values: + STATE_UNSPECIFIED (0): + Asset discovery run state was unspecified. + COMPLETED (1): + Asset discovery run completed successfully. + SUPERSEDED (2): + Asset discovery run was cancelled with tasks + still pending, as another run for the same + organization was started with a higher priority. + TERMINATED (3): + Asset discovery run was killed and + terminated. + """ + STATE_UNSPECIFIED = 0 + COMPLETED = 1 + SUPERSEDED = 2 + TERMINATED = 3 + + state: State = proto.Field( + proto.ENUM, + number=1, + enum=State, + ) + duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=2, + message=duration_pb2.Duration, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py new file mode 100644 index 00000000..de35f3c7 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py @@ -0,0 +1,80 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'SecurityMarks', + }, +) + + +class SecurityMarks(proto.Message): + r"""User specified security marks that are attached to the parent + Security Command Center resource. Security marks are scoped + within a Security Command Center organization -- they can be + modified and viewed by all users who have proper permissions on + the organization. + + Attributes: + name (str): + The relative resource name of the SecurityMarks. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Examples: + "organizations/{organization_id}/assets/{asset_id}/securityMarks" + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". + marks (MutableMapping[str, str]): + Mutable user specified security marks belonging to the + parent resource. Constraints are as follows: + + - Keys and values are treated as case insensitive + - Keys must be between 1 - 256 characters (inclusive) + - Keys must be letters, numbers, underscores, or dashes + - Values have leading and trailing whitespace trimmed, + remaining characters must be between 1 - 4096 characters + (inclusive) + canonical_name (str): + The canonical name of the marks. Examples: + "organizations/{organization_id}/assets/{asset_id}/securityMarks" + "folders/{folder_id}/assets/{asset_id}/securityMarks" + "projects/{project_number}/assets/{asset_id}/securityMarks" + "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" + "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" + "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + marks: MutableMapping[str, str] = proto.MapField( + proto.STRING, + proto.STRING, + number=2, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=3, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py new file mode 100644 index 00000000..21eb74c9 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py @@ -0,0 +1,1641 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + +from google.cloud.securitycenter_v1p1beta1.types import asset as gcs_asset +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import folder +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'CreateFindingRequest', + 'CreateNotificationConfigRequest', + 'CreateSourceRequest', + 'DeleteNotificationConfigRequest', + 'GetNotificationConfigRequest', + 'GetOrganizationSettingsRequest', + 'GetSourceRequest', + 'GroupAssetsRequest', + 'GroupAssetsResponse', + 'GroupFindingsRequest', + 'GroupFindingsResponse', + 'GroupResult', + 'ListNotificationConfigsRequest', + 'ListNotificationConfigsResponse', + 'ListSourcesRequest', + 'ListSourcesResponse', + 'ListAssetsRequest', + 'ListAssetsResponse', + 'ListFindingsRequest', + 'ListFindingsResponse', + 'SetFindingStateRequest', + 'RunAssetDiscoveryRequest', + 'UpdateFindingRequest', + 'UpdateNotificationConfigRequest', + 'UpdateOrganizationSettingsRequest', + 'UpdateSourceRequest', + 'UpdateSecurityMarksRequest', + }, +) + + +class CreateFindingRequest(proto.Message): + r"""Request message for creating a finding. + + Attributes: + parent (str): + Required. Resource name of the new finding's parent. Its + format should be + "organizations/[organization_id]/sources/[source_id]". + finding_id (str): + Required. Unique identifier provided by the + client within the parent scope. + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + Required. The Finding being created. The name and + security_marks will be ignored as they are both output only + fields on this resource. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + finding_id: str = proto.Field( + proto.STRING, + number=2, + ) + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_finding.Finding, + ) + + +class CreateNotificationConfigRequest(proto.Message): + r"""Request message for creating a notification config. + + Attributes: + parent (str): + Required. Resource name of the new notification config's + parent. Its format is "organizations/[organization_id]". + config_id (str): + Required. Unique identifier provided by the + client within the parent scope. It must be + between 1 and 128 characters, and contains + alphanumeric characters, underscores or hyphens + only. + notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): + Required. The notification config being + created. The name and the service account will + be ignored as they are both output only fields + on this resource. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + config_id: str = proto.Field( + proto.STRING, + number=2, + ) + notification_config: gcs_notification_config.NotificationConfig = proto.Field( + proto.MESSAGE, + number=3, + message=gcs_notification_config.NotificationConfig, + ) + + +class CreateSourceRequest(proto.Message): + r"""Request message for creating a source. + + Attributes: + parent (str): + Required. Resource name of the new source's parent. Its + format should be "organizations/[organization_id]". + source (google.cloud.securitycenter_v1p1beta1.types.Source): + Required. The Source being created, only the display_name + and description will be used. All other fields will be + ignored. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_source.Source, + ) + + +class DeleteNotificationConfigRequest(proto.Message): + r"""Request message for deleting a notification config. + + Attributes: + name (str): + Required. Name of the notification config to delete. Its + format is + "organizations/[organization_id]/notificationConfigs/[config_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetNotificationConfigRequest(proto.Message): + r"""Request message for getting a notification config. + + Attributes: + name (str): + Required. Name of the notification config to get. Its format + is + "organizations/[organization_id]/notificationConfigs/[config_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetOrganizationSettingsRequest(proto.Message): + r"""Request message for getting organization settings. + + Attributes: + name (str): + Required. Name of the organization to get organization + settings for. Its format is + "organizations/[organization_id]/organizationSettings". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSourceRequest(proto.Message): + r"""Request message for getting a source. + + Attributes: + name (str): + Required. Relative resource name of the source. Its format + is "organizations/[organization_id]/source/[source_id]". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GroupAssetsRequest(proto.Message): + r"""Request message for grouping by assets. + + Attributes: + parent (str): + Required. Name of the organization to groupBy. Its format is + "organizations/[organization_id], folders/[folder_id], or + projects/[project_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``update_time = "2019-06-10T16:07:18-07:00"`` + ``update_time = 1560208038000`` + + - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``create_time = "2019-06-10T16:07:18-07:00"`` + ``create_time = 1560208038000`` + + - iam_policy.policy_blob: ``=``, ``:`` + + - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + - security_marks.marks: ``=``, ``:`` + + - security_center_properties.resource_name: ``=``, ``:`` + + - security_center_properties.resource_name_display_name: + ``=``, ``:`` + + - security_center_properties.resource_type: ``=``, ``:`` + + - security_center_properties.resource_parent: ``=``, ``:`` + + - security_center_properties.resource_parent_display_name: + ``=``, ``:`` + + - security_center_properties.resource_project: ``=``, ``:`` + + - security_center_properties.resource_project_display_name: + ``=``, ``:`` + + - security_center_properties.resource_owners: ``=``, ``:`` + + For example, ``resource_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``resource_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-resource_properties.my_property : ""`` + group_by (str): + Required. Expression that defines what assets fields to use + for grouping. The string value should follow SQL syntax: + comma separated list of fields. For example: + "security_center_properties.resource_project,security_center_properties.project". + + The following fields are supported when compare_duration is + not set: + + - security_center_properties.resource_project + - security_center_properties.resource_project_display_name + - security_center_properties.resource_type + - security_center_properties.resource_parent + - security_center_properties.resource_parent_display_name + + The following fields are supported when compare_duration is + set: + + - security_center_properties.resource_type + - security_center_properties.resource_project_display_name + - security_center_properties.resource_parent_display_name + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the GroupResult's + "state_change" property is updated to indicate whether the + asset was added, removed, or remained present during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state change value is derived based on the presence of + the asset at the two points in time. Intermediate state + changes between the two times don't affect the result. For + example, the results aren't affected if the asset is removed + and re-created again. + + Possible "state_change" values when compare_duration is + specified: + + - "ADDED": indicates that the asset was not present at the + start of compare_duration, but present at reference_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at + reference_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and reference_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all assets present at read_time. + + If this field is set then ``state_change`` must be a + specified field in ``group_by``. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + page_token (str): + The value returned by the last ``GroupAssetsResponse``; + indicates that this is a continuation of a prior + ``GroupAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=4, + message=duration_pb2.Duration, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=5, + message=timestamp_pb2.Timestamp, + ) + page_token: str = proto.Field( + proto.STRING, + number=7, + ) + page_size: int = proto.Field( + proto.INT32, + number=8, + ) + + +class GroupAssetsResponse(proto.Message): + r"""Response message for grouping by assets. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of results matching the + query. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class GroupFindingsRequest(proto.Message): + r"""Request message for grouping by findings. + + Attributes: + parent (str): + Required. Name of the source to groupBy. Its format is + "organizations/[organization_id]/sources/[source_id]", + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]. To groupBy across + all sources provide a source_id of ``-``. For example: + organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/-, or + projects/{project_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - parent: ``=``, ``:`` + + - resource_name: ``=``, ``:`` + + - state: ``=``, ``:`` + + - category: ``=``, ``:`` + + - external_uri: ``=``, ``:`` + + - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + - severity: ``=``, ``:`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``event_time = "2019-06-10T16:07:18-07:00"`` + ``event_time = 1560208038000`` + + - security_marks.marks: ``=``, ``:`` + + - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + For example, ``source_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``source_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-source_properties.my_property : ""`` + group_by (str): + Required. Expression that defines what assets fields to use + for grouping (including ``state_change``). The string value + should follow SQL syntax: comma separated list of fields. + For example: "parent,resource_name". + + The following fields are supported: + + - resource_name + - category + - state + - parent + - severity + + The following fields are supported when compare_duration is + set: + + - state_change + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the GroupResult's + "state_change" attribute is updated to indicate whether the + finding had its state changed, the finding's state remained + unchanged, or if the finding was added during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state_change value is derived based on the presence and + state of the finding at the two points in time. Intermediate + state changes between the two times don't affect the result. + For example, the results aren't affected if the finding is + made inactive and then active again. + + Possible "state_change" values when compare_duration is + specified: + + - "CHANGED": indicates that the finding was present and + matched the given filter at the start of + compare_duration, but changed its state at read_time. + - "UNCHANGED": indicates that the finding was present and + matched the given filter at the start of compare_duration + and did not change state at read_time. + - "ADDED": indicates that the finding did not match the + given filter or was not present at the start of + compare_duration, but was present at read_time. + - "REMOVED": indicates that the finding was present and + matched the filter at the start of compare_duration, but + did not match the filter at read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all findings present at read_time. + + If this field is set then ``state_change`` must be a + specified field in ``group_by``. + page_token (str): + The value returned by the last ``GroupFindingsResponse``; + indicates that this is a continuation of a prior + ``GroupFindings`` call, and that the system should return + the next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + group_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + page_token: str = proto.Field( + proto.STRING, + number=7, + ) + page_size: int = proto.Field( + proto.INT32, + number=8, + ) + + +class GroupFindingsResponse(proto.Message): + r"""Response message for group by findings. + + Attributes: + group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): + Group results. There exists an element for + each existing unique combination of + property/values. The element contains a count + for the number of times those specific + property/values appear. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the groupBy request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of results matching the + query. + """ + + @property + def raw_page(self): + return self + + group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message='GroupResult', + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class GroupResult(proto.Message): + r"""Result containing the properties and count of a groupBy + request. + + Attributes: + properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): + Properties matching the groupBy fields in the + request. + count (int): + Total count of resources for the given + properties. + """ + + properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=1, + message=struct_pb2.Value, + ) + count: int = proto.Field( + proto.INT64, + number=2, + ) + + +class ListNotificationConfigsRequest(proto.Message): + r"""Request message for listing notification configs. + + Attributes: + parent (str): + Required. Name of the organization to list notification + configs. Its format is "organizations/[organization_id]". + page_token (str): + The value returned by the last + ``ListNotificationConfigsResponse``; indicates that this is + a continuation of a prior ``ListNotificationConfigs`` call, + and that the system should return the next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_token: str = proto.Field( + proto.STRING, + number=2, + ) + page_size: int = proto.Field( + proto.INT32, + number=3, + ) + + +class ListNotificationConfigsResponse(proto.Message): + r"""Response message for listing notification configs. + + Attributes: + notification_configs (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.NotificationConfig]): + Notification configs belonging to the + requested parent. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_notification_config.NotificationConfig, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListSourcesRequest(proto.Message): + r"""Request message for listing sources. + + Attributes: + parent (str): + Required. Resource name of the parent of sources to list. + Its format should be "organizations/[organization_id], + folders/[folder_id], or projects/[project_id]". + page_token (str): + The value returned by the last ``ListSourcesResponse``; + indicates that this is a continuation of a prior + ``ListSources`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_token: str = proto.Field( + proto.STRING, + number=2, + ) + page_size: int = proto.Field( + proto.INT32, + number=7, + ) + + +class ListSourcesResponse(proto.Message): + r"""Response message for listing sources. + + Attributes: + sources (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Source]): + Sources belonging to the requested parent. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + """ + + @property + def raw_page(self): + return self + + sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListAssetsRequest(proto.Message): + r"""Request message for listing assets. + + Attributes: + parent (str): + Required. Name of the organization assets should belong to. + Its format is "organizations/[organization_id], + folders/[folder_id], or projects/[project_id]". + filter (str): + Expression that defines the filter to apply across assets. + The expression is a list of zero or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. The fields map to those defined in the Asset + resource. Examples include: + + - name + - security_center_properties.resource_name + - resource_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following are the allowed field and operator + combinations: + + - name: ``=`` + + - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``update_time = "2019-06-10T16:07:18-07:00"`` + ``update_time = 1560208038000`` + + - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``create_time = "2019-06-10T16:07:18-07:00"`` + ``create_time = 1560208038000`` + + - iam_policy.policy_blob: ``=``, ``:`` + + - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, + ``<=`` + + - security_marks.marks: ``=``, ``:`` + + - security_center_properties.resource_name: ``=``, ``:`` + + - security_center_properties.resource_display_name: ``=``, + ``:`` + + - security_center_properties.resource_type: ``=``, ``:`` + + - security_center_properties.resource_parent: ``=``, ``:`` + + - security_center_properties.resource_parent_display_name: + ``=``, ``:`` + + - security_center_properties.resource_project: ``=``, ``:`` + + - security_center_properties.resource_project_display_name: + ``=``, ``:`` + + - security_center_properties.resource_owners: ``=``, ``:`` + + For example, ``resource_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``resource_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-resource_properties.my_property : ""`` + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,resource_properties.a_property". + Redundant space characters in the syntax are insignificant. + "name desc,resource_properties.a_property" and " name desc , + resource_properties.a_property " are equivalent. + + The following fields are supported: name update_time + resource_properties security_marks.marks + security_center_properties.resource_name + security_center_properties.resource_display_name + security_center_properties.resource_parent + security_center_properties.resource_parent_display_name + security_center_properties.resource_project + security_center_properties.resource_project_display_name + security_center_properties.resource_type + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + assets. The filter is limited to assets existing + at the supplied time and their values are those + at that specific time. Absence of this field + will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the ListAssetsResult's + "state_change" attribute is updated to indicate whether the + asset was added, removed, or remained present during the + compare_duration period of time that precedes the read_time. + This is the time between (read_time - compare_duration) and + read_time. + + The state_change value is derived based on the presence of + the asset at the two points in time. Intermediate state + changes between the two times don't affect the result. For + example, the results aren't affected if the asset is removed + and re-created again. + + Possible "state_change" values when compare_duration is + specified: + + - "ADDED": indicates that the asset was not present at the + start of compare_duration, but present at read_time. + - "REMOVED": indicates that the asset was present at the + start of compare_duration, but not present at read_time. + - "ACTIVE": indicates that the asset was present at both + the start and the end of the time period defined by + compare_duration and read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all assets present at read_time. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + A field mask to specify the ListAssetsResult + fields to be listed in the response. + An empty field mask will list all fields. + page_token (str): + The value returned by the last ``ListAssetsResponse``; + indicates that this is a continuation of a prior + ``ListAssets`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=7, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=8, + ) + page_size: int = proto.Field( + proto.INT32, + number=9, + ) + + +class ListAssetsResponse(proto.Message): + r"""Response message for listing assets. + + Attributes: + list_assets_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult]): + Assets matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of assets matching the + query. + """ + + class ListAssetsResult(proto.Message): + r"""Result containing the Asset and its State. + + Attributes: + asset (google.cloud.securitycenter_v1p1beta1.types.Asset): + Asset matching the search request. + state_change (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult.StateChange): + State change of the asset between the points + in time. + """ + class StateChange(proto.Enum): + r"""The change in state of the asset. + + When querying across two points in time this describes the change + between the two points: ADDED, REMOVED, or ACTIVE. If there was no + compare_duration supplied in the request the state change will be: + UNUSED + + Values: + UNUSED (0): + State change is unused, this is the canonical + default for this enum. + ADDED (1): + Asset was added between the points in time. + REMOVED (2): + Asset was removed between the points in time. + ACTIVE (3): + Asset was present at both point(s) in time. + """ + UNUSED = 0 + ADDED = 1 + REMOVED = 2 + ACTIVE = 3 + + asset: gcs_asset.Asset = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_asset.Asset, + ) + state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( + proto.ENUM, + number=2, + enum='ListAssetsResponse.ListAssetsResult.StateChange', + ) + + @property + def raw_page(self): + return self + + list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=ListAssetsResult, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class ListFindingsRequest(proto.Message): + r"""Request message for listing findings. + + Attributes: + parent (str): + Required. Name of the source the findings belong to. Its + format is + "organizations/[organization_id]/sources/[source_id], + folders/[folder_id]/sources/[source_id], or + projects/[project_id]/sources/[source_id]". To list across + all sources provide a source_id of ``-``. For example: + organizations/{organization_id}/sources/-, + folders/{folder_id}/sources/- or + projects/{projects_id}/sources/- + filter (str): + Expression that defines the filter to apply across findings. + The expression is a list of one or more restrictions + combined via logical operators ``AND`` and ``OR``. + Parentheses are supported, and ``OR`` has higher precedence + than ``AND``. + + Restrictions have the form `` `` + and may have a ``-`` character in front of them to indicate + negation. Examples include: + + - name + - source_properties.a_property + - security_marks.marks.marka + + The supported operators are: + + - ``=`` for all value types. + - ``>``, ``<``, ``>=``, ``<=`` for integer values. + - ``:``, meaning substring matching, for strings. + + The supported value types are: + + - string literals in quotes. + - integer literals without quotes. + - boolean literals ``true`` and ``false`` without quotes. + + The following field and operator combinations are supported: + + - name: ``=`` + + - parent: ``=``, ``:`` + + - resource_name: ``=``, ``:`` + + - state: ``=``, ``:`` + + - category: ``=``, ``:`` + + - external_uri: ``=``, ``:`` + + - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` + + - severity: ``=``, ``:`` + + Usage: This should be milliseconds since epoch or an + RFC3339 string. Examples: + ``event_time = "2019-06-10T16:07:18-07:00"`` + ``event_time = 1560208038000`` + + security_marks.marks: ``=``, ``:`` source_properties: ``=``, + ``:``, ``>``, ``<``, ``>=``, ``<=`` + + For example, ``source_properties.size = 100`` is a valid + filter string. + + Use a partial match on the empty string to filter based on a + property existing: ``source_properties.my_property : ""`` + + Use a negated partial match on the empty string to filter + based on a property not existing: + ``-source_properties.my_property : ""`` + order_by (str): + Expression that defines what fields and order to use for + sorting. The string value should follow SQL syntax: comma + separated list of fields. For example: + "name,resource_properties.a_property". The default sorting + order is ascending. To specify descending order for a field, + a suffix " desc" should be appended to the field name. For + example: "name desc,source_properties.a_property". Redundant + space characters in the syntax are insignificant. "name + desc,source_properties.a_property" and " name desc , + source_properties.a_property " are equivalent. + + The following fields are supported: name parent state + category resource_name event_time source_properties + security_marks.marks + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used as a reference point when filtering + findings. The filter is limited to findings + existing at the supplied time and their values + are those at that specific time. Absence of this + field will default to the API's version of NOW. + compare_duration (google.protobuf.duration_pb2.Duration): + When compare_duration is set, the ListFindingsResult's + "state_change" attribute is updated to indicate whether the + finding had its state changed, the finding's state remained + unchanged, or if the finding was added in any state during + the compare_duration period of time that precedes the + read_time. This is the time between (read_time - + compare_duration) and read_time. + + The state_change value is derived based on the presence and + state of the finding at the two points in time. Intermediate + state changes between the two times don't affect the result. + For example, the results aren't affected if the finding is + made inactive and then active again. + + Possible "state_change" values when compare_duration is + specified: + + - "CHANGED": indicates that the finding was present and + matched the given filter at the start of + compare_duration, but changed its state at read_time. + - "UNCHANGED": indicates that the finding was present and + matched the given filter at the start of compare_duration + and did not change state at read_time. + - "ADDED": indicates that the finding did not match the + given filter or was not present at the start of + compare_duration, but was present at read_time. + - "REMOVED": indicates that the finding was present and + matched the filter at the start of compare_duration, but + did not match the filter at read_time. + + If compare_duration is not specified, then the only possible + state_change is "UNUSED", which will be the state_change set + for all findings present at read_time. + field_mask (google.protobuf.field_mask_pb2.FieldMask): + A field mask to specify the Finding fields to + be listed in the response. An empty field mask + will list all fields. + page_token (str): + The value returned by the last ``ListFindingsResponse``; + indicates that this is a continuation of a prior + ``ListFindings`` call, and that the system should return the + next page of data. + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + filter: str = proto.Field( + proto.STRING, + number=2, + ) + order_by: str = proto.Field( + proto.STRING, + number=3, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=4, + message=timestamp_pb2.Timestamp, + ) + compare_duration: duration_pb2.Duration = proto.Field( + proto.MESSAGE, + number=5, + message=duration_pb2.Duration, + ) + field_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=7, + message=field_mask_pb2.FieldMask, + ) + page_token: str = proto.Field( + proto.STRING, + number=8, + ) + page_size: int = proto.Field( + proto.INT32, + number=9, + ) + + +class ListFindingsResponse(proto.Message): + r"""Response message for listing findings. + + Attributes: + list_findings_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult]): + Findings matching the list request. + read_time (google.protobuf.timestamp_pb2.Timestamp): + Time used for executing the list request. + next_page_token (str): + Token to retrieve the next page of results, + or empty if there are no more results. + total_size (int): + The total number of findings matching the + query. + """ + + class ListFindingsResult(proto.Message): + r"""Result containing the Finding and its StateChange. + + Attributes: + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + Finding matching the search request. + state_change (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.StateChange): + State change of the finding between the + points in time. + resource (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.Resource): + Output only. Resource that is associated with + this finding. + """ + class StateChange(proto.Enum): + r"""The change in state of the finding. + + When querying across two points in time this describes the change in + the finding between the two points: CHANGED, UNCHANGED, ADDED, or + REMOVED. Findings can not be deleted, so REMOVED implies that the + finding at timestamp does not match the filter specified, but it did + at timestamp - compare_duration. If there was no compare_duration + supplied in the request the state change will be: UNUSED + + Values: + UNUSED (0): + State change is unused, this is the canonical + default for this enum. + CHANGED (1): + The finding has changed state in some way + between the points in time and existed at both + points. + UNCHANGED (2): + The finding has not changed state between the + points in time and existed at both points. + ADDED (3): + The finding was created between the points in + time. + REMOVED (4): + The finding at timestamp does not match the filter + specified, but it did at timestamp - compare_duration. + """ + UNUSED = 0 + CHANGED = 1 + UNCHANGED = 2 + ADDED = 3 + REMOVED = 4 + + class Resource(proto.Message): + r"""Information related to the Google Cloud resource that is + associated with this finding. + + Attributes: + name (str): + The full resource name of the resource. See: + https://cloud.google.com/apis/design/resource_names#full_resource_name + project_name (str): + The full resource name of project that the + resource belongs to. + project_display_name (str): + The human readable name of project that the + resource belongs to. + parent_name (str): + The full resource name of resource's parent. + parent_display_name (str): + The human readable name of resource's parent. + folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): + Contains a Folder message for each folder in + the assets ancestry. The first folder is the + deepest nested folder, and the last folder is + the folder directly under the Organization. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + project_name: str = proto.Field( + proto.STRING, + number=2, + ) + project_display_name: str = proto.Field( + proto.STRING, + number=3, + ) + parent_name: str = proto.Field( + proto.STRING, + number=4, + ) + parent_display_name: str = proto.Field( + proto.STRING, + number=5, + ) + folders: MutableSequence[folder.Folder] = proto.RepeatedField( + proto.MESSAGE, + number=10, + message=folder.Folder, + ) + + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( + proto.ENUM, + number=2, + enum='ListFindingsResponse.ListFindingsResult.StateChange', + ) + resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( + proto.MESSAGE, + number=3, + message='ListFindingsResponse.ListFindingsResult.Resource', + ) + + @property + def raw_page(self): + return self + + list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=ListFindingsResult, + ) + read_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=2, + message=timestamp_pb2.Timestamp, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=3, + ) + total_size: int = proto.Field( + proto.INT32, + number=4, + ) + + +class SetFindingStateRequest(proto.Message): + r"""Request message for updating a finding's state. + + Attributes: + name (str): + Required. The relative resource name of the finding. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". + state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): + Required. The desired State of the finding. + start_time (google.protobuf.timestamp_pb2.Timestamp): + Required. The time at which the updated state + takes effect. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + state: gcs_finding.Finding.State = proto.Field( + proto.ENUM, + number=2, + enum=gcs_finding.Finding.State, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +class RunAssetDiscoveryRequest(proto.Message): + r"""Request message for running asset discovery for an + organization. + + Attributes: + parent (str): + Required. Name of the organization to run asset discovery + for. Its format is "organizations/[organization_id]". + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + + +class UpdateFindingRequest(proto.Message): + r"""Request message for updating or creating a finding. + + Attributes: + finding (google.cloud.securitycenter_v1p1beta1.types.Finding): + Required. The finding resource to update or create if it + does not already exist. parent, security_marks, and + update_time will be ignored. + + In the case of creation, the finding id portion of the name + must be alphanumeric and less than or equal to 32 characters + and greater than 0 characters in length. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the finding resource. + This field should not be specified when creating a finding. + + When updating a finding, an empty mask is treated as + updating all mutable fields and replacing source_properties. + Individual source_properties can be added/updated by using + "source_properties." in the field mask. + """ + + finding: gcs_finding.Finding = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_finding.Finding, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateNotificationConfigRequest(proto.Message): + r"""Request message for updating a notification config. + + Attributes: + notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): + Required. The notification config to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + notification config. + If empty all mutable fields will be updated. + """ + + notification_config: gcs_notification_config.NotificationConfig = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_notification_config.NotificationConfig, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateOrganizationSettingsRequest(proto.Message): + r"""Request message for updating an organization's settings. + + Attributes: + organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): + Required. The organization settings resource + to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the + settings resource. + If empty all mutable fields will be updated. + """ + + organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_organization_settings.OrganizationSettings, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSourceRequest(proto.Message): + r"""Request message for updating a source. + + Attributes: + source (google.cloud.securitycenter_v1p1beta1.types.Source): + Required. The source resource to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the source + resource. + If empty all mutable fields will be updated. + """ + + source: gcs_source.Source = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_source.Source, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + +class UpdateSecurityMarksRequest(proto.Message): + r"""Request message for updating a SecurityMarks resource. + + Attributes: + security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): + Required. The security marks resource to + update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The FieldMask to use when updating the security marks + resource. + + The field mask must not contain duplicate fields. If empty + or set to "marks", all marks will be replaced. Individual + marks can be updated using "marks.". + start_time (google.protobuf.timestamp_pb2.Timestamp): + The time at which the updated SecurityMarks + take effect. If not set uses current server + time. Updates will be applied to the + SecurityMarks that are active immediately + preceding this time. + """ + + security_marks: gcs_security_marks.SecurityMarks = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_marks.SecurityMarks, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + start_time: timestamp_pb2.Timestamp = proto.Field( + proto.MESSAGE, + number=3, + message=timestamp_pb2.Timestamp, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py new file mode 100644 index 00000000..05fb8de6 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py @@ -0,0 +1,87 @@ +# -*- 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. +# +from __future__ import annotations + +from typing import MutableMapping, MutableSequence + +import proto # type: ignore + + +__protobuf__ = proto.module( + package='google.cloud.securitycenter.v1p1beta1', + manifest={ + 'Source', + }, +) + + +class Source(proto.Message): + r"""Security Command Center finding source. A finding source + is an entity or a mechanism that can produce a finding. A source + is like a container of findings that come from the same scanner, + logger, monitor, etc. + + Attributes: + name (str): + The relative resource name of this source. See: + https://cloud.google.com/apis/design/resource_names#relative_resource_name + Example: + "organizations/{organization_id}/sources/{source_id}". + display_name (str): + The source's display name. + A source's display name must be unique amongst + its siblings, for example, two sources with the + same parent can't share the same display name. + The display name must have a length between 1 + and 64 characters (inclusive). + description (str): + The description of the source (max of 1024 + characters). Example: + "Web Security Scanner is a web security scanner + for common vulnerabilities in App Engine + applications. It can automatically scan and + detect four common vulnerabilities, including + cross-site-scripting (XSS), Flash injection, + mixed content (HTTP in HTTPS), and + outdated/insecure libraries.". + canonical_name (str): + The canonical name of the finding. It's either + "organizations/{organization_id}/sources/{source_id}", + "folders/{folder_id}/sources/{source_id}" or + "projects/{project_number}/sources/{source_id}", depending + on the closest CRM ancestor of the resource associated with + the finding. + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + display_name: str = proto.Field( + proto.STRING, + number=2, + ) + description: str = proto.Field( + proto.STRING, + number=3, + ) + canonical_name: str = proto.Field( + proto.STRING, + number=14, + ) + + +__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/mypy.ini b/owl-bot-staging/v1p1beta1/mypy.ini new file mode 100644 index 00000000..574c5aed --- /dev/null +++ b/owl-bot-staging/v1p1beta1/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +python_version = 3.7 +namespace_packages = True diff --git a/owl-bot-staging/v1p1beta1/noxfile.py b/owl-bot-staging/v1p1beta1/noxfile.py new file mode 100644 index 00000000..bc69c724 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/noxfile.py @@ -0,0 +1,184 @@ +# -*- 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 os +import pathlib +import shutil +import subprocess +import sys + + +import nox # type: ignore + +ALL_PYTHON = [ + "3.7", + "3.8", + "3.9", + "3.10", + "3.11", +] + +CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() + +LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" +PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") + +BLACK_VERSION = "black==22.3.0" +BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] +DEFAULT_PYTHON_VERSION = "3.11" + +nox.sessions = [ + "unit", + "cover", + "mypy", + "check_lower_bounds" + # exclude update_lower_bounds from default + "docs", + "blacken", + "lint", + "lint_setup_py", +] + +@nox.session(python=ALL_PYTHON) +def unit(session): + """Run the unit test suite.""" + + session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') + session.install('-e', '.') + + session.run( + 'py.test', + '--quiet', + '--cov=google/cloud/securitycenter_v1p1beta1/', + '--cov=tests/', + '--cov-config=.coveragerc', + '--cov-report=term', + '--cov-report=html', + os.path.join('tests', 'unit', ''.join(session.posargs)) + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def cover(session): + """Run the final coverage report. + This outputs the coverage report aggregating coverage from the unit + test runs (not system test runs), and then erases coverage data. + """ + session.install("coverage", "pytest-cov") + session.run("coverage", "report", "--show-missing", "--fail-under=100") + + session.run("coverage", "erase") + + +@nox.session(python=ALL_PYTHON) +def mypy(session): + """Run the type checker.""" + session.install( + 'mypy', + 'types-requests', + 'types-protobuf' + ) + session.install('.') + session.run( + 'mypy', + '--explicit-package-bases', + 'google', + ) + + +@nox.session +def update_lower_bounds(session): + """Update lower bounds in constraints.txt to match setup.py""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'update', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + + +@nox.session +def check_lower_bounds(session): + """Check lower bounds in setup.py are reflected in constraints file""" + session.install('google-cloud-testutils') + session.install('.') + + session.run( + 'lower-bound-checker', + 'check', + '--package-name', + PACKAGE_NAME, + '--constraints-file', + str(LOWER_BOUND_CONSTRAINTS_FILE), + ) + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def docs(session): + """Build the docs for this library.""" + + session.install("-e", ".") + session.install("sphinx==4.0.1", "alabaster", "recommonmark") + + shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) + session.run( + "sphinx-build", + "-W", # warnings as errors + "-T", # show full traceback on exception + "-N", # no colors + "-b", + "html", + "-d", + os.path.join("docs", "_build", "doctrees", ""), + os.path.join("docs", ""), + os.path.join("docs", "_build", "html", ""), + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint(session): + """Run linters. + + Returns a failure if the linters find linting errors or sufficiently + serious code quality issues. + """ + session.install("flake8", BLACK_VERSION) + session.run( + "black", + "--check", + *BLACK_PATHS, + ) + session.run("flake8", "google", "tests", "samples") + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def blacken(session): + """Run black. Format code to uniform standard.""" + session.install(BLACK_VERSION) + session.run( + "black", + *BLACK_PATHS, + ) + + +@nox.session(python=DEFAULT_PYTHON_VERSION) +def lint_setup_py(session): + """Verify that setup.py is valid (including RST check).""" + session.install("docutils", "pygments") + session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py new file mode 100644 index 00000000..ef2942ac --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_create_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = await client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py new file mode 100644 index 00000000..94caafaf --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_create_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateFindingRequest( + parent="parent_value", + finding_id="finding_id_value", + ) + + # Make the request + response = client.create_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py new file mode 100644 index 00000000..612c30b2 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_create_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = await client.create_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py new file mode 100644 index 00000000..8ea771f7 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_create_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( + parent="parent_value", + config_id="config_id_value", + ) + + # Make the request + response = client.create_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py new file mode 100644 index 00000000..9c599ff1 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_create_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py new file mode 100644 index 00000000..57fc8d29 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for CreateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_create_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.CreateSourceRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py new file mode 100644 index 00000000..9c019213 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + await client.delete_notification_config(request=request) + + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py new file mode 100644 index 00000000..c6749af1 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py @@ -0,0 +1,50 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for DeleteNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_delete_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( + name="name_value", + ) + + # Make the request + client.delete_notification_config(request=request) + + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py new file mode 100644 index 00000000..52a3b23e --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py new file mode 100644 index 00000000..492edf74 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_get_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.GetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.get_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py new file mode 100644 index 00000000..31300fbc --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_get_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = await client.get_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py new file mode 100644 index 00000000..7df5d0f5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_get_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetNotificationConfigRequest( + name="name_value", + ) + + # Make the request + response = client.get_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py new file mode 100644 index 00000000..d593432d --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = await client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py new file mode 100644 index 00000000..77db9ca0 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_get_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( + name="name_value", + ) + + # Make the request + response = client.get_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py new file mode 100644 index 00000000..b6408c81 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_get_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py new file mode 100644 index 00000000..89b9154d --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py @@ -0,0 +1,52 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GetSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_get_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py new file mode 100644 index 00000000..170d9c60 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_group_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py new file mode 100644 index 00000000..0e0f6c95 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_group_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py new file mode 100644 index 00000000..d3082c32 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_group_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py new file mode 100644 index 00000000..f31156df --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for GroupFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_group_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.GroupFindingsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py new file mode 100644 index 00000000..3e190b23 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_list_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py new file mode 100644 index 00000000..68effc1f --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListAssets +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_list_assets(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListAssetsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_assets(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py new file mode 100644 index 00000000..dadc521c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_list_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py new file mode 100644 index 00000000..ad7b5c4c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListFindings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_list_findings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py new file mode 100644 index 00000000..520b1905 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListNotificationConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py new file mode 100644 index 00000000..c31addea --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListNotificationConfigs +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_list_notification_configs(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_notification_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py new file mode 100644 index 00000000..0a8fa68d --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_list_sources(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + async for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py new file mode 100644 index 00000000..187eaf3a --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for ListSources +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_list_sources(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.ListSourcesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_sources(request=request) + + # Handle the response + for response in page_result: + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py new file mode 100644 index 00000000..1f51b6eb --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = (await operation).result() + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py new file mode 100644 index 00000000..b6ccd7af --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py @@ -0,0 +1,56 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for RunAssetDiscovery +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_run_asset_discovery(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( + parent="parent_value", + ) + + # Make the request + operation = client.run_asset_discovery(request=request) + + print("Waiting for operation to complete...") + + response = operation.result() + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py new file mode 100644 index 00000000..8248bf7d --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_set_finding_state(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = await client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py new file mode 100644 index 00000000..4c530ca1 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetFindingState +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_set_finding_state(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.SetFindingStateRequest( + name="name_value", + state="INACTIVE", + ) + + # Make the request + response = client.set_finding_state(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py new file mode 100644 index 00000000..d22f33d1 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = await client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py new file mode 100644 index 00000000..a3008967 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py @@ -0,0 +1,53 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for SetIamPolicy +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_set_iam_policy(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.SetIamPolicyRequest( + resource="resource_value", + ) + + # Make the request + response = client.set_iam_policy(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py new file mode 100644 index 00000000..2f837372 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +async def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = await client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py new file mode 100644 index 00000000..d0254a87 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py @@ -0,0 +1,54 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for TestIamPermissions +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 +from google.iam.v1 import iam_policy_pb2 # type: ignore + + +def sample_test_iam_permissions(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = iam_policy_pb2.TestIamPermissionsRequest( + resource="resource_value", + permissions=['permissions_value1', 'permissions_value2'], + ) + + # Make the request + response = client.test_iam_permissions(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py new file mode 100644 index 00000000..3d89b4d8 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_update_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateFindingRequest( + ) + + # Make the request + response = await client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py new file mode 100644 index 00000000..568c925c --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateFinding +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_update_finding(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateFindingRequest( + ) + + # Make the request + response = client.update_finding(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py new file mode 100644 index 00000000..8401b510 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_update_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = await client.update_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py new file mode 100644 index 00000000..215b8872 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateNotificationConfig +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_update_notification_config(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( + ) + + # Make the request + response = client.update_notification_config(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py new file mode 100644 index 00000000..2d5a82f3 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = await client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py new file mode 100644 index 00000000..703bedc5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateOrganizationSettings +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_update_organization_settings(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( + ) + + # Make the request + response = client.update_organization_settings(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py new file mode 100644 index 00000000..69f8fd59 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_update_security_marks(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = await client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py new file mode 100644 index 00000000..d4649225 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSecurityMarks +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_update_security_marks(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( + ) + + # Make the request + response = client.update_security_marks(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py new file mode 100644 index 00000000..ad60833b --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +async def sample_update_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSourceRequest( + ) + + # Make the request + response = await client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py new file mode 100644 index 00000000..22e21644 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py @@ -0,0 +1,51 @@ +# -*- 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. +# +# Generated code. DO NOT EDIT! +# +# Snippet for UpdateSource +# NOTE: This snippet has been automatically generated for illustrative purposes only. +# It may require modifications to work in your environment. + +# To install the latest published package dependency, execute the following: +# python3 -m pip install google-cloud-securitycenter + + +# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] +# This snippet has been automatically generated and should be regarded as a +# code template only. +# It will require modifications to work: +# - It may require correct/in-range values for request initialization. +# - It may require specifying regional endpoints when creating the service +# client as shown in: +# https://googleapis.dev/python/google-api-core/latest/client_options.html +from google.cloud import securitycenter_v1p1beta1 + + +def sample_update_source(): + # Create a client + client = securitycenter_v1p1beta1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1p1beta1.UpdateSourceRequest( + ) + + # Make the request + response = client.update_source(request=request) + + # Handle the response + print(response) + +# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json b/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json new file mode 100644 index 00000000..774592ce --- /dev/null +++ b/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json @@ -0,0 +1,3808 @@ +{ + "clientLibrary": { + "apis": [ + { + "id": "google.cloud.securitycenter.v1p1beta1", + "version": "v1p1beta1" + } + ], + "language": "PYTHON", + "name": "google-cloud-securitycenter", + "version": "0.1.0" + }, + "snippets": [ + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "finding_id", + "type": "str" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "create_finding" + }, + "description": "Sample for CreateFinding", + "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "config_id", + "type": "str" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "create_notification_config" + }, + "description": "Sample for CreateNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "config_id", + "type": "str" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "create_notification_config" + }, + "description": "Sample for CreateNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1p1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1p1beta1.types.Source" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "create_source" + }, + "description": "Sample for CreateSource", + "file": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.delete_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_notification_config" + }, + "description": "Sample for DeleteNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.delete_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "DeleteNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "shortName": "delete_notification_config" + }, + "description": "Sample for DeleteNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync", + "segments": [ + { + "end": 49, + "start": 27, + "type": "FULL" + }, + { + "end": 49, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" + }, + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "get_notification_config" + }, + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "get_notification_config" + }, + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", + "shortName": "get_organization_settings" + }, + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager", + "shortName": "list_findings" + }, + "description": "Sample for ListFindings", + "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_notification_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListNotificationConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager", + "shortName": "list_notification_configs" + }, + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_notification_configs", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListNotificationConfigs" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager", + "shortName": "list_notification_configs" + }, + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_sources", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListSources" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager", + "shortName": "list_sources" + }, + "description": "Sample for ListSources", + "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation_async.AsyncOperation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.run_asset_discovery", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "RunAssetDiscovery" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.api_core.operation.Operation", + "shortName": "run_asset_discovery" + }, + "description": "Sample for RunAssetDiscovery", + "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", + "segments": [ + { + "end": 55, + "start": 27, + "type": "FULL" + }, + { + "end": 55, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 52, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 56, + "start": 53, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_finding_state", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetFindingState" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "state", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" + }, + { + "name": "start_time", + "type": "google.protobuf.timestamp_pb2.Timestamp" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "set_finding_state" + }, + "description": "Sample for SetFindingState", + "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_iam_policy", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "SetIamPolicy" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "set_iam_policy" + }, + "description": "Sample for SetIamPolicy", + "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.test_iam_permissions", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "TestIamPermissions" + }, + "parameters": [ + { + "name": "request", + "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" + }, + { + "name": "resource", + "type": "str" + }, + { + "name": "permissions", + "type": "MutableSequence[str]" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", + "shortName": "test_iam_permissions" + }, + "description": "Sample for TestIamPermissions", + "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 41, + "start": 39, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 47, + "start": 42, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 50, + "start": 48, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 51, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_finding", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateFinding" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" + }, + { + "name": "finding", + "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", + "shortName": "update_finding" + }, + "description": "Sample for UpdateFinding", + "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "update_notification_config" + }, + "description": "Sample for UpdateNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_notification_config", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateNotificationConfig" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" + }, + { + "name": "notification_config", + "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", + "shortName": "update_notification_config" + }, + "description": "Sample for UpdateNotificationConfig", + "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_organization_settings", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateOrganizationSettings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" + }, + { + "name": "organization_settings", + "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", + "shortName": "update_organization_settings" + }, + "description": "Sample for UpdateOrganizationSettings", + "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_security_marks", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityMarks" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" + }, + { + "name": "security_marks", + "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", + "shortName": "update_security_marks" + }, + "description": "Sample for UpdateSecurityMarks", + "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1p1beta1.types.Source" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_source", + "method": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", + "service": { + "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" + }, + { + "name": "source", + "type": "google.cloud.securitycenter_v1p1beta1.types.Source" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", + "shortName": "update_source" + }, + "description": "Sample for UpdateSource", + "file": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py" + } + ] +} diff --git a/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py b/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py new file mode 100644 index 00000000..c285b274 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py @@ -0,0 +1,198 @@ +#! /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 securitycenterCallTransformer(cst.CSTTransformer): + CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') + METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { + 'create_finding': ('parent', 'finding_id', 'finding', ), + 'create_notification_config': ('parent', 'config_id', 'notification_config', ), + 'create_source': ('parent', 'source', ), + 'delete_notification_config': ('name', ), + 'get_iam_policy': ('resource', 'options', ), + 'get_notification_config': ('name', ), + 'get_organization_settings': ('name', ), + 'get_source': ('name', ), + 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), + 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), + 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), + 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), + 'list_notification_configs': ('parent', 'page_token', 'page_size', ), + 'list_sources': ('parent', 'page_token', 'page_size', ), + 'run_asset_discovery': ('parent', ), + 'set_finding_state': ('name', 'state', 'start_time', ), + 'set_iam_policy': ('resource', 'policy', 'update_mask', ), + 'test_iam_permissions': ('resource', 'permissions', ), + 'update_finding': ('finding', 'update_mask', ), + 'update_notification_config': ('notification_config', 'update_mask', ), + 'update_organization_settings': ('organization_settings', 'update_mask', ), + 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), + 'update_source': ('source', 'update_mask', ), + } + + 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=securitycenterCallTransformer(), +): + """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 securitycenter 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/owl-bot-staging/v1p1beta1/setup.py b/owl-bot-staging/v1p1beta1/setup.py new file mode 100644 index 00000000..f1154c41 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/setup.py @@ -0,0 +1,91 @@ +# -*- 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 io +import os + +import setuptools # type: ignore + +package_root = os.path.abspath(os.path.dirname(__file__)) + +name = 'google-cloud-securitycenter' + + +description = "Google Cloud Securitycenter API client library" + +version = {} +with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: + exec(fp.read(), version) +version = version["__version__"] + +if version[0] == "0": + release_status = "Development Status :: 4 - Beta" +else: + release_status = "Development Status :: 5 - Production/Stable" + +dependencies = [ + "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", + "proto-plus >= 1.22.0, <2.0.0dev", + "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", + "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", + "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", +] +url = "https://github.com/googleapis/python-securitycenter" + +package_root = os.path.abspath(os.path.dirname(__file__)) + +readme_filename = os.path.join(package_root, "README.rst") +with io.open(readme_filename, encoding="utf-8") as readme_file: + readme = readme_file.read() + +packages = [ + package + for package in setuptools.PEP420PackageFinder.find() + if package.startswith("google") +] + +namespaces = ["google", "google.cloud"] + +setuptools.setup( + name=name, + version=version, + description=description, + long_description=readme, + author="Google LLC", + author_email="googleapis-packages@google.com", + license="Apache 2.0", + url=url, + classifiers=[ + release_status, + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Operating System :: OS Independent", + "Topic :: Internet", + ], + platforms="Posix; MacOS X; Windows", + packages=packages, + python_requires=">=3.7", + namespace_packages=namespaces, + install_requires=dependencies, + include_package_data=True, + zip_safe=False, +) diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt new file mode 100644 index 00000000..2beecf99 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt @@ -0,0 +1,10 @@ +# This constraints file is used to check that lower bounds +# are correct in setup.py +# List all library dependencies and extras in this file. +# Pin the version to the lower bound. +# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", +# Then this file should have google-cloud-foo==1.14.0 +google-api-core==1.34.0 +proto-plus==1.22.0 +protobuf==3.19.5 +grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt new file mode 100644 index 00000000..ad3f0fa5 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# This constraints file is required for unit tests. +# List all library dependencies and extras in this file. +google-api-core +proto-plus +protobuf +grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/tests/__init__.py b/owl-bot-staging/v1p1beta1/tests/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/tests/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/tests/unit/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py new file mode 100644 index 00000000..231bc125 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py @@ -0,0 +1,16 @@ + +# -*- 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. +# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py new file mode 100644 index 00000000..370aacb7 --- /dev/null +++ b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py @@ -0,0 +1,14070 @@ +# -*- 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 os +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import grpc +from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule +from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format + +from google.api_core import client_options +from google.api_core import exceptions as core_exceptions +from google.api_core import future +from google.api_core import gapic_v1 +from google.api_core import grpc_helpers +from google.api_core import grpc_helpers_async +from google.api_core import operation +from google.api_core import operation_async # type: ignore +from google.api_core import operations_v1 +from google.api_core import path_template +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterAsyncClient +from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterClient +from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers +from google.cloud.securitycenter_v1p1beta1.services.security_center import transports +from google.cloud.securitycenter_v1p1beta1.types import finding +from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding +from google.cloud.securitycenter_v1p1beta1.types import notification_config +from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config +from google.cloud.securitycenter_v1p1beta1.types import organization_settings +from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings +from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response +from google.cloud.securitycenter_v1p1beta1.types import security_marks +from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks +from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service +from google.cloud.securitycenter_v1p1beta1.types import source +from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source +from google.iam.v1 import iam_policy_pb2 # type: ignore +from google.iam.v1 import options_pb2 # type: ignore +from google.iam.v1 import policy_pb2 # type: ignore +from google.longrunning import operations_pb2 +from google.oauth2 import service_account +from google.protobuf import duration_pb2 # type: ignore +from google.protobuf import empty_pb2 # type: ignore +from google.protobuf import field_mask_pb2 # type: ignore +from google.protobuf import struct_pb2 # type: ignore +from google.protobuf import timestamp_pb2 # type: ignore +from google.type import expr_pb2 # type: ignore +import google.auth + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert SecurityCenterClient._get_default_mtls_endpoint(None) is None + assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint + assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_info(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +@pytest.mark.parametrize("transport_class,transport_name", [ + (transports.SecurityCenterGrpcTransport, "grpc"), + (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize("client_class,transport_name", [ + (SecurityCenterClient, "grpc"), + (SecurityCenterAsyncClient, "grpc_asyncio"), + (SecurityCenterClient, "rest"), +]) +def test_security_center_client_from_service_account_file(client_class, transport_name): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: + factory.return_value = creds + client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else + 'https://securitycenter.googleapis.com' + ) + + +def test_security_center_client_get_transport_class(): + transport = SecurityCenterClient.get_transport_class() + available_transports = [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterRestTransport, + ] + assert transport in available_transports + + transport = SecurityCenterClient.get_transport_class("grpc") + assert transport == transports.SecurityCenterGrpcTransport + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_client_options(client_class, transport_class, transport_name): + # Check that if channel is provided we won't create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions(api_audience="https://language.googleapis.com") + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com" + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): + with mock.patch.object(transport_class, '__init__') as patched: + with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class", [ + SecurityCenterClient, SecurityCenterAsyncClient +]) +@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) +@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) +def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): + with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize("client_class,transport_class,transport_name", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), +]) +def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), + (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), +]) +def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + +def test_security_center_client_client_options_from_dict(): + with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: + grpc_transport.return_value = None + client = SecurityCenterClient( + client_options={'api_endpoint': 'squid.clam.whelk'} + ) + grpc_transport.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), +]) +def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): + # Check the case credentials file is provided. + options = client_options.ClientOptions( + credentials_file="credentials.json" + ) + + with mock.patch.object(transport_class, '__init__') as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # test that the credentials from file are saved and used as the credentials. + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch.object( + google.auth, "default", autospec=True + ) as adc, mock.patch.object( + grpc_helpers, "create_channel" + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + file_creds = ga_credentials.AnonymousCredentials() + load_creds.return_value = (file_creds, None) + adc.return_value = (creds, None) + client = client_class(client_options=options, transport=transport_name) + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=file_creds, + credentials_file=None, + quota_project_id=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=None, + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_create_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + client.create_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + +@pytest.mark.asyncio +async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_create_source_async_from_dict(): + await test_create_source_async(request_type=dict) + + +def test_create_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSourceRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.create_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + + +def test_create_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_source( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + response = client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_create_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + client.create_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + +@pytest.mark.asyncio +async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + )) + response = await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_create_finding_async_from_dict(): + await test_create_finding_async(request_type=dict) + + +def test_create_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateFindingRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.create_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + + +def test_create_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_finding( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].finding_id + mock_val = 'finding_id_value' + assert arg == mock_val + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateNotificationConfigRequest, + dict, +]) +def test_create_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_create_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + client.create_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_create_notification_config_async_from_dict(): + await test_create_notification_config_async(request_type=dict) + + +def test_create_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateNotificationConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + call.return_value = gcs_notification_config.NotificationConfig() + client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_create_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateNotificationConfigRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + await client.create_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_create_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_notification_config( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].config_id + mock_val = 'config_id_value' + assert arg == mock_val + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + + +def test_create_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_create_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_notification_config( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].config_id + mock_val = 'config_id_value' + assert arg == mock_val + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_create_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, +]) +def test_delete_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + client.delete_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_notification_config_async_from_dict(): + await test_delete_notification_config_async(request_type=dict) + + +def test_delete_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + call.return_value = None + client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_delete_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_delete_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_delete_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_delete_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_delete_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + client.get_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.GetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_get_iam_policy_async_from_dict(): + await test_get_iam_policy_async(request_type=dict) + + +def test_get_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.GetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.get_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_get_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.get_iam_policy(request={ + 'resource': 'resource_value', + 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), + } + ) + call.assert_called() + + +def test_get_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_get_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetNotificationConfigRequest, + dict, +]) +def test_get_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_get_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + client.get_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_get_notification_config_async_from_dict(): + await test_get_notification_config_async(request_type=dict) + + +def test_get_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + call.return_value = notification_config.NotificationConfig() + client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetNotificationConfigRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) + await client.get_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_notification_config( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + client.get_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_get_organization_settings_async_from_dict(): + await test_get_organization_settings_async(request_type=dict) + + +def test_get_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = organization_settings.OrganizationSettings() + client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetOrganizationSettingsRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + await client.get_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_organization_settings( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_get_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + client.get_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + +@pytest.mark.asyncio +async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GetSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_get_source_async_from_dict(): + await test_get_source_async(request_type=dict) + + +def test_get_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = source.Source() + client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_get_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GetSourceRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + await client.get_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_get_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + + +def test_get_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + +@pytest.mark.asyncio +async def test_get_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_source( + name='name_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_get_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + client.group_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + +@pytest.mark.asyncio +async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_assets_async_from_dict(): + await test_group_assets_async(request_type=dict) + + +def test_group_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = securitycenter_service.GroupAssetsResponse() + client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) + await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + client.group_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + +@pytest.mark.asyncio +async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_findings_async_from_dict(): + await test_group_findings_async(request_type=dict) + + +def test_group_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = securitycenter_service.GroupFindingsResponse() + client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_group_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + await client.group_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_group_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + + +def test_group_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + +@pytest.mark.asyncio +async def test_group_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.group_findings( + parent='parent_value', + group_by='group_by_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + arg = args[0].group_by + mock_val = 'group_by_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_group_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.group_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) +def test_group_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = list(client.group_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_group_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.group_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_group_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.group_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + client.list_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + +@pytest.mark.asyncio +async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_assets_async_from_dict(): + await test_list_assets_async(request_type=dict) + + +def test_list_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = securitycenter_service.ListAssetsResponse() + client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListAssetsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) + await client.list_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_assets_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListAssetsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_assets( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_assets_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_assets( + securitycenter_service.ListAssetsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_assets_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListAssetsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_assets( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_assets_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_assets( + securitycenter_service.ListAssetsRequest(), + parent='parent_value', + ) + + +def test_list_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_assets(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) +def test_list_assets_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = list(client.list_assets(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_assets_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_assets(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_assets_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_assets), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + response = client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + client.list_findings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + +@pytest.mark.asyncio +async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + )) + response = await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListFindingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_list_findings_async_from_dict(): + await test_list_findings_async(request_type=dict) + + +def test_list_findings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = securitycenter_service.ListFindingsResponse() + client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_findings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListFindingsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) + await client.list_findings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_findings( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_findings( + securitycenter_service.ListFindingsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_findings( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_findings( + securitycenter_service.ListFindingsRequest(), + parent='parent_value', + ) + + +def test_list_findings_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_findings(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in results) +def test_list_findings_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + pages = list(client.list_findings(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_findings_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_findings(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_findings_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_findings), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListNotificationConfigsRequest, + dict, +]) +def test_list_notification_configs(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + ) + response = client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_notification_configs_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + client.list_notification_configs() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + +@pytest.mark.asyncio +async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_from_dict(): + await test_list_notification_configs_async(request_type=dict) + + +def test_list_notification_configs_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListNotificationConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_notification_configs_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListNotificationConfigsRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) + await client.list_notification_configs(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_notification_configs_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_notification_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_notification_configs_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_notification_configs_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_notification_configs( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_notification_configs_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + + +def test_list_notification_configs_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_notification_configs(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in results) +def test_list_notification_configs_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = list(client.list_notification_configs(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_notification_configs(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + response = client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + client.list_sources() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + +@pytest.mark.asyncio +async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + )) + response = await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListSourcesRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesAsyncPager) + assert response.next_page_token == 'next_page_token_value' + + +@pytest.mark.asyncio +async def test_list_sources_async_from_dict(): + await test_list_sources_async(request_type=dict) + + +def test_list_sources_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = securitycenter_service.ListSourcesResponse() + client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_list_sources_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListSourcesRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + await client.list_sources(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_list_sources_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_list_sources_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_list_sources_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListSourcesResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_sources( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_list_sources_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata(( + ('parent', ''), + )), + ) + pager = client.list_sources(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) +def test_list_sources_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__') as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = list(client.list_sources(request={}).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.asyncio +async def test_list_sources_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_sources(request={},) + assert async_pager.next_page_token == 'abc' + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, source.Source) + for i in responses) + + +@pytest.mark.asyncio +async def test_list_sources_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), + '__call__', new_callable=mock.AsyncMock) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/spam') + response = client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_run_asset_discovery_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + client.run_asset_discovery() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + +@pytest.mark.asyncio +async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + response = await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +@pytest.mark.asyncio +async def test_run_asset_discovery_async_from_dict(): + await test_run_asset_discovery_async(request_type=dict) + + +def test_run_asset_discovery_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = operations_pb2.Operation(name='operations/op') + client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_run_asset_discovery_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.RunAssetDiscoveryRequest() + + request.parent = 'parent_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) + await client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'parent=parent_value', + ) in kw['metadata'] + + +def test_run_asset_discovery_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + + +def test_run_asset_discovery_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name='operations/op') + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name='operations/spam') + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.run_asset_discovery( + parent='parent_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = 'parent_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_run_asset_discovery_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + response = client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_set_finding_state_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + client.set_finding_state() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + +@pytest.mark.asyncio +async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + )) + response = await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.SetFindingStateRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_set_finding_state_async_from_dict(): + await test_set_finding_state_async(request_type=dict) + + +def test_set_finding_state_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = finding.Finding() + client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_finding_state_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.SetFindingStateRequest() + + request.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_finding_state(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'name=name_value', + ) in kw['metadata'] + + +def test_set_finding_state_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + + +def test_set_finding_state_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_finding_state), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_finding_state( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = 'name_value' + assert arg == mock_val + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE + assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) + +@pytest.mark.asyncio +async def test_set_finding_state_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + response = client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + client.set_iam_policy() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + +@pytest.mark.asyncio +async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( + version=774, + etag=b'etag_blob', + )) + response = await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +@pytest.mark.asyncio +async def test_set_iam_policy_async_from_dict(): + await test_set_iam_policy_async(request_type=dict) + + +def test_set_iam_policy_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = policy_pb2.Policy() + client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_set_iam_policy_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.SetIamPolicyRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.set_iam_policy(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_set_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.set_iam_policy(request={ + 'resource': 'resource_value', + 'policy': policy_pb2.Policy(version=774), + 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), + } + ) + call.assert_called() + + +def test_set_iam_policy_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + + +def test_set_iam_policy_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.set_iam_policy), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.set_iam_policy( + resource='resource_value', + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + +@pytest.mark.asyncio +async def test_set_iam_policy_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + response = client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + client.test_iam_permissions() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + +@pytest.mark.asyncio +async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + )) + response = await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_async_from_dict(): + await test_test_iam_permissions_async(request_type=dict) + + +def test_test_iam_permissions_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_test_iam_permissions_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = iam_policy_pb2.TestIamPermissionsRequest() + + request.resource = 'resource_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + await client.test_iam_permissions(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'resource=resource_value', + ) in kw['metadata'] + +def test_test_iam_permissions_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + response = client.test_iam_permissions(request={ + 'resource': 'resource_value', + 'permissions': ['permissions_value'], + } + ) + call.assert_called() + + +def test_test_iam_permissions_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + + +def test_test_iam_permissions_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.test_iam_permissions( + resource='resource_value', + permissions=['permissions_value'], + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].resource + mock_val = 'resource_value' + assert arg == mock_val + arg = args[0].permissions + mock_val = ['permissions_value'] + assert arg == mock_val + +@pytest.mark.asyncio +async def test_test_iam_permissions_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + response = client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_update_finding_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + client.update_finding() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + +@pytest.mark.asyncio +async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + )) + response = await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateFindingRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_update_finding_async_from_dict(): + await test_update_finding_async(request_type=dict) + + +def test_update_finding_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = gcs_finding.Finding() + client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_finding_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateFindingRequest() + + request.finding.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.update_finding(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'finding.name=name_value', + ) in kw['metadata'] + + +def test_update_finding_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_finding_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_finding_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_finding), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_finding.Finding() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_finding( + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].finding + mock_val = gcs_finding.Finding(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_finding_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateNotificationConfigRequest, + dict, +]) +def test_update_notification_config(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + response = client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_update_notification_config_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + client.update_notification_config() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + +@pytest.mark.asyncio +async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + )) + response = await client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +@pytest.mark.asyncio +async def test_update_notification_config_async_from_dict(): + await test_update_notification_config_async(request_type=dict) + + +def test_update_notification_config_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateNotificationConfigRequest() + + request.notification_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + call.return_value = gcs_notification_config.NotificationConfig() + client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'notification_config.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_notification_config_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateNotificationConfigRequest() + + request.notification_config.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + await client.update_notification_config(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'notification_config.name=name_value', + ) in kw['metadata'] + + +def test_update_notification_config_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_notification_config_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_notification_config_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_notification_config), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_notification_config.NotificationConfig() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_notification_config_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + response = client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + client.update_organization_settings() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + +@pytest.mark.asyncio +async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + )) + response = await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +@pytest.mark.asyncio +async def test_update_organization_settings_async_from_dict(): + await test_update_organization_settings_async(request_type=dict) + + +def test_update_organization_settings_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = gcs_organization_settings.OrganizationSettings() + client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_organization_settings_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateOrganizationSettingsRequest() + + request.organization_settings.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + await client.update_organization_settings(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'organization_settings.name=name_value', + ) in kw['metadata'] + + +def test_update_organization_settings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + + +def test_update_organization_settings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_organization_settings), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_organization_settings.OrganizationSettings() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_organization_settings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + response = client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_source_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + client.update_source() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + +@pytest.mark.asyncio +async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + )) + response = await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSourceRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_update_source_async_from_dict(): + await test_update_source_async(request_type=dict) + + +def test_update_source_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = gcs_source.Source() + client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_source_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSourceRequest() + + request.source.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.update_source(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'source.name=name_value', + ) in kw['metadata'] + + +def test_update_source_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_source( + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_source_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_source_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_source), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_source.Source() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_source( + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].source + mock_val = gcs_source.Source(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_source_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks(request_type, transport: str = 'grpc'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + ) + response = client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_security_marks_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + client.update_security_marks() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + +@pytest.mark.asyncio +async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + )) + response = await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +@pytest.mark.asyncio +async def test_update_security_marks_async_from_dict(): + await test_update_security_marks_async(request_type=dict) + + +def test_update_security_marks_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = gcs_security_marks.SecurityMarks() + client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +@pytest.mark.asyncio +async def test_update_security_marks_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() + + request.security_marks.name = 'name_value' + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + await client.update_security_marks(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + 'x-goog-request-params', + 'security_marks.name=name_value', + ) in kw['metadata'] + + +def test_update_security_marks_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + + +def test_update_security_marks_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), + '__call__') as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name='name_value') + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) + assert arg == mock_val + +@pytest.mark.asyncio +async def test_update_security_marks_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateSourceRequest, + dict, +]) +def test_create_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.CreateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_source(request) + + +def test_create_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_create_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent='parent_value', + source=gcs_source.Source(name='name_value'), + ) + + +def test_create_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateFindingRequest, + dict, +]) +def test_create_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["finding_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "findingId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == request_init["finding_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["findingId"] = 'finding_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("finding_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == 'finding_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_finding(request) + + expected_params = [ + ( + "findingId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.CreateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_finding(request) + + +def test_create_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) + + +def test_create_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent='parent_value', + finding_id='finding_id_value', + finding=gcs_finding.Finding(name='name_value'), + ) + + +def test_create_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.CreateNotificationConfigRequest, + dict, +]) +def test_create_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.create_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + assert "configId" not in jsonified_request + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "configId" in jsonified_request + assert jsonified_request["configId"] == request_init["config_id"] + + jsonified_request["parent"] = 'parent_value' + jsonified_request["configId"] = 'config_id_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("config_id", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "configId" in jsonified_request + assert jsonified_request["configId"] == 'config_id_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.create_notification_config(request) + + expected_params = [ + ( + "configId", + "", + ), + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_create_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.create_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) + + request = securitycenter_service.CreateNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_notification_config(request) + + +def test_create_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.create_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) + + +def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent='parent_value', + config_id='config_id_value', + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + ) + + +def test_create_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, +]) +def test_delete_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.delete_notification_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "delete", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.delete_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_delete_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + + +def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_notification_config(request) + + +def test_delete_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = '' + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.delete_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name='name_value', + ) + + +def test_delete_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.GetIamPolicyRequest, + dict, +]) +def test_get_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.GetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.GetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_iam_policy(request) + + +def test_get_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) + + +def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_get_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetNotificationConfigRequest, + dict, +]) +def test_get_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) + + request = securitycenter_service.GetNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = notification_config.NotificationConfig() + + client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_notification_config(request) + + +def test_get_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name='name_value', + ) + + +def test_get_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetOrganizationSettingsRequest, + dict, +]) +def test_get_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) + + request = securitycenter_service.GetOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = organization_settings.OrganizationSettings() + + client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/organizationSettings'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_organization_settings(request) + + +def test_get_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/organizationSettings'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), + name='name_value', + ) + + +def test_get_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GetSourceRequest, + dict, +]) +def test_get_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.get_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.get_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_get_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.get_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = source.Source.to_json(source.Source()) + + request = securitycenter_service.GetSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = source.Source() + + client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_source(request) + + +def test_get_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.get_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_get_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_source( + securitycenter_service.GetSourceRequest(), + name='name_value', + ) + + +def test_get_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupAssetsRequest, + dict, +]) +def test_group_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) + + request = securitycenter_service.GroupAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupAssetsResponse() + + client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_assets(request) + + +def test_group_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.group_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.GroupFindingsRequest, + dict, +]) +def test_group_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.group_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["group_by"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + jsonified_request["groupBy"] = 'group_by_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == 'group_by_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.group_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_group_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.group_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_group_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) + + request = securitycenter_service.GroupFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.GroupFindingsResponse() + + client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.group_findings(request) + + +def test_group_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.GroupFindingsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + group_by='group_by_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.group_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) + + +def test_group_findings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent='parent_value', + group_by='group_by_value', + ) + + +def test_group_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token='abc', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token='def', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.group_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) + for i in results) + + pages = list(client.group_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListAssetsRequest, + dict, +]) +def test_list_assets_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_assets(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_assets(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_assets_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_assets._get_unset_required_fields({}) + assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_assets_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) + + request = securitycenter_service.ListAssetsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListAssetsResponse() + + client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_assets(request) + + +def test_list_assets_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListAssetsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_assets(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets" % client.transport._host, args[1]) + + +def test_list_assets_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_assets( + securitycenter_service.ListAssetsRequest(), + parent='parent_value', + ) + + +def test_list_assets_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token='def', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_assets(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results) + + pages = list(client.list_assets(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListFindingsRequest, + dict, +]) +def test_list_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse( + next_page_token='next_page_token_value', + total_size=1086, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_findings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListFindingsPager) + assert response.next_page_token == 'next_page_token_value' + assert response.total_size == 1086 + + +def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_findings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) + + request = securitycenter_service.ListFindingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListFindingsResponse() + + client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_findings(request) + + +def test_list_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListFindingsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) + + +def test_list_findings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_findings( + securitycenter_service.ListFindingsRequest(), + parent='parent_value', + ) + + +def test_list_findings_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='abc', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token='def', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1/sources/sample2'} + + pager = client.list_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) + for i in results) + + pages = list(client.list_findings(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListNotificationConfigsRequest, + dict, +]) +def test_list_notification_configs_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_notification_configs(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_notification_configs(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_notification_configs_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_notification_configs._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_notification_configs_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) + + request = securitycenter_service.ListNotificationConfigsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListNotificationConfigsResponse() + + client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_notification_configs(request) + + +def test_list_notification_configs_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_notification_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) + + +def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent='parent_value', + ) + + +def test_list_notification_configs_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token='abc', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token='def', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_notification_configs(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, notification_config.NotificationConfig) + for i in results) + + pages = list(client.list_notification_configs(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.ListSourcesRequest, + dict, +]) +def test_list_sources_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse( + next_page_token='next_page_token_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.list_sources(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == 'next_page_token_value' + + +def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("page_size", "page_token", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "get", + 'query_params': pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.list_sources(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_list_sources_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.list_sources._get_unset_required_fields({}) + assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_sources_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) + + request = securitycenter_service.ListSourcesRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = securitycenter_service.ListSourcesResponse() + + client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_sources(request) + + +def test_list_sources_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListSourcesResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.list_sources(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) + + +def test_list_sources_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent='parent_value', + ) + + +def test_list_sources_rest_pager(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + #with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token='abc', + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token='def', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token='ghi', + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode('UTF-8') + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {'parent': 'organizations/sample1'} + + pager = client.list_sources(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) + for i in results) + + pages = list(client.list_sources(request=sample_request).pages) + for page_, token in zip(pages, ['abc','def','ghi', '']): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, +]) +def test_run_asset_discovery_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.run_asset_discovery(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = 'parent_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == 'parent_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.run_asset_discovery(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_run_asset_discovery_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_run_asset_discovery_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(operation.Operation, "_set_result_from_operation"), \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) + + request = securitycenter_service.RunAssetDiscoveryRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'parent': 'organizations/sample1'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.run_asset_discovery(request) + + +def test_run_asset_discovery_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name='operations/spam') + + # get arguments that satisfy an http rule for this method + sample_request = {'parent': 'organizations/sample1'} + + # get truthy value for each flattened field + mock_args = dict( + parent='parent_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.run_asset_discovery(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) + + +def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent='parent_value', + ) + + +def test_run_asset_discovery_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.SetFindingStateRequest, + dict, +]) +def test_set_finding_state_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_finding_state(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = 'name_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == 'name_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_finding_state(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_finding_state_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_finding_state._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_finding_state_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = finding.Finding.to_json(finding.Finding()) + + request = securitycenter_service.SetFindingStateRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = finding.Finding() + + client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_finding_state(request) + + +def test_set_finding_state_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} + + # get truthy value for each flattened field + mock_args = dict( + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_finding_state(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) + + +def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name='name_value', + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), + ) + + +def test_set_finding_state_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.SetIamPolicyRequest, + dict, +]) +def test_set_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b'etag_blob', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.set_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b'etag_blob' + + +def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.set_iam_policy(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_set_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.SetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.SetIamPolicyRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.set_iam_policy(request) + + +def test_set_iam_policy_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.set_iam_policy(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) + + +def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource='resource_value', + ) + + +def test_set_iam_policy_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + iam_policy_pb2.TestIamPermissionsRequest, + dict, +]) +def test_test_iam_permissions_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=['permissions_value'], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.test_iam_permissions(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ['permissions_value'] + + +def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request_init["permissions"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = 'resource_value' + jsonified_request["permissions"] = 'permissions_value' + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == 'resource_value' + assert "permissions" in jsonified_request + assert jsonified_request["permissions"] == 'permissions_value' + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "post", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.test_iam_permissions(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_test_iam_permissions_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_test_iam_permissions_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.TestIamPermissionsRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) + + request = iam_policy_pb2.TestIamPermissionsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = iam_policy_pb2.TestIamPermissionsResponse() + + client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'resource': 'organizations/sample1/sources/sample2'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.test_iam_permissions(request) + + +def test_test_iam_permissions_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = iam_policy_pb2.TestIamPermissionsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {'resource': 'organizations/sample1/sources/sample2'} + + # get truthy value for each flattened field + mock_args = dict( + resource='resource_value', + permissions=['permissions_value'], + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.test_iam_permissions(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) + + +def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource='resource_value', + permissions=['permissions_value'], + ) + + +def test_test_iam_permissions_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateFindingRequest, + dict, +]) +def test_update_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name='name_value', + parent='parent_value', + resource_name='resource_name_value', + state=gcs_finding.Finding.State.ACTIVE, + category='category_value', + external_uri='external_uri_value', + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == 'name_value' + assert response.parent == 'parent_value' + assert response.resource_name == 'resource_name_value' + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == 'category_value' + assert response.external_uri == 'external_uri_value' + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == 'canonical_name_value' + + +def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_finding(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.UpdateFindingRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_finding(request) + + +def test_update_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} + + # get truthy value for each flattened field + mock_args = dict( + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) + + +def test_update_finding_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateNotificationConfigRequest, + dict, +]) +def test_update_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name='name_value', + description='description_value', + event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, + pubsub_topic='pubsub_topic_value', + service_account='service_account_value', + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == 'name_value' + assert response.description == 'description_value' + assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING + assert response.pubsub_topic == 'pubsub_topic_value' + assert response.service_account == 'service_account_value' + + +def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_notification_config(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) + + request = securitycenter_service.UpdateNotificationConfigRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_notification_config(request) + + +def test_update_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) + + +def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateOrganizationSettingsRequest, + dict, +]) +def test_update_organization_settings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings( + name='name_value', + enable_asset_discovery=True, + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_organization_settings(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == 'name_value' + assert response.enable_asset_discovery is True + + +def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_organization_settings(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_organization_settings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_organization_settings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) + + request = securitycenter_service.UpdateOrganizationSettingsRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_organization_settings.OrganizationSettings() + + client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_organization_settings(request) + + +def test_update_organization_settings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_organization_settings.OrganizationSettings() + + # get arguments that satisfy an http rule for this method + sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} + + # get truthy value for each flattened field + mock_args = dict( + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_organization_settings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) + + +def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), + ) + + +def test_update_organization_settings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSourceRequest, + dict, +]) +def test_update_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name='name_value', + display_name='display_name_value', + description='description_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == 'name_value' + assert response.display_name == 'display_name_value' + assert response.description == 'description_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_source(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.UpdateSourceRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} + request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_source(request) + + +def test_update_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} + + # get truthy value for each flattened field + mock_args = dict( + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) + + +def test_update_source_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +@pytest.mark.parametrize("request_type", [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, +]) +def test_update_security_marks_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks( + name='name_value', + canonical_name='canonical_name_value', + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + response = client.update_security_marks(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == 'name_value' + assert response.canonical_name == 'canonical_name_value' + + +def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads(json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False + )) + + # verify fields with default values are dropped + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("start_time", "update_mask", )) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, 'request') as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, 'transcode') as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + 'uri': 'v1/sample_method', + 'method': "patch", + 'query_params': pb_request, + } + transcode_result['body'] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + response = client.update_security_marks(request) + + expected_params = [ + ('$alt', 'json;enum-encoding=int') + ] + actual_params = req.call_args.kwargs['params'] + assert expected_params == actual_params + + +def test_update_security_marks_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) + + unset_fields = transport.update_security_marks._get_unset_required_fields({}) + assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_security_marks_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object(type(client.transport._session), "request") as req, \ + mock.patch.object(path_template, "transcode") as transcode, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ + mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) + + request = securitycenter_service.UpdateSecurityMarksRequest() + metadata =[ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_security_marks.SecurityMarks() + + client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_security_marks(request) + + +def test_update_security_marks_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), 'request') as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_marks.SecurityMarks() + + # get arguments that satisfy an http rule for this method + sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} + + # get truthy value for each flattened field + mock_args = dict( + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode('UTF-8') + req.return_value = response_value + + client.update_security_marks(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate("%s/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) + + +def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name='name_value'), + update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), + ) + + +def test_update_security_marks_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest' + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options=options, + credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityCenterClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = SecurityCenterClient(transport=transport) + assert client.transport is transport + +def test_transport_get_channel(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityCenterGrpcTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + + transport = transports.SecurityCenterGrpcAsyncIOTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + channel = transport.grpc_channel + assert channel + +@pytest.mark.parametrize("transport_class", [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, +]) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "rest", +]) +def test_transport_kind(transport_name): + transport = SecurityCenterClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + +def test_transport_grpc_default(): + # A client should use the gRPC transport by default. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert isinstance( + client.transport, + transports.SecurityCenterGrpcTransport, + ) + +def test_security_center_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json" + ) + + +def test_security_center_base_transport(): + # Instantiate the base transport. + with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: + Transport.return_value = None + transport = transports.SecurityCenterTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + 'create_source', + 'create_finding', + 'create_notification_config', + 'delete_notification_config', + 'get_iam_policy', + 'get_notification_config', + 'get_organization_settings', + 'get_source', + 'group_assets', + 'group_findings', + 'list_assets', + 'list_findings', + 'list_notification_configs', + 'list_sources', + 'run_asset_discovery', + 'set_finding_state', + 'set_iam_policy', + 'test_iam_permissions', + 'update_finding', + 'update_notification_config', + 'update_organization_settings', + 'update_source', + 'update_security_marks', + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + with pytest.raises(NotImplementedError): + transport.close() + + # Additionally, the LRO client (a property) should + # also raise NotImplementedError + with pytest.raises(NotImplementedError): + transport.operations_client + + # Catch all for all remaining methods and properties + remainder = [ + 'kind', + ] + for r in remainder: + with pytest.raises(NotImplementedError): + getattr(transport, r)() + + +def test_security_center_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with("credentials.json", + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id="octopus", + ) + + +def test_security_center_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.SecurityCenterTransport() + adc.assert_called_once() + + +def test_security_center_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + SecurityCenterClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + quota_project_id=None, + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + ], +) +def test_security_center_transport_auth_adc(transport_class): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class(quota_project_id="octopus", scopes=["1", "2"]) + adc.assert_called_once_with( + scopes=["1", "2"], + default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), + quota_project_id="octopus", + ) + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityCenterGrpcTransport, + transports.SecurityCenterGrpcAsyncIOTransport, + transports.SecurityCenterRestTransport, + ], +) +def test_security_center_transport_auth_gdch_credentials(transport_class): + host = 'https://language.com' + api_audience_tests = [None, 'https://language2.com'] + api_audience_expect = [host, 'https://language2.com'] + for t, e in zip(api_audience_tests, api_audience_expect): + with mock.patch.object(google.auth, 'default', autospec=True) as adc: + gdch_mock = mock.MagicMock() + type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) + adc.return_value = (gdch_mock, None) + transport_class(host=host, api_audience=t) + gdch_mock.with_gdch_audience.assert_called_once_with( + e + ) + + +@pytest.mark.parametrize( + "transport_class,grpc_helpers", + [ + (transports.SecurityCenterGrpcTransport, grpc_helpers), + (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) + ], +) +def test_security_center_transport_create_channel(transport_class, grpc_helpers): + # If credentials and host are not provided, the transport class should use + # ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( + grpc_helpers, "create_channel", autospec=True + ) as create_channel: + creds = ga_credentials.AnonymousCredentials() + adc.return_value = (creds, None) + transport_class( + quota_project_id="octopus", + scopes=["1", "2"] + ) + + create_channel.assert_called_with( + "securitycenter.googleapis.com:443", + credentials=creds, + credentials_file=None, + quota_project_id="octopus", + default_scopes=( + 'https://www.googleapis.com/auth/cloud-platform', +), + scopes=["1", "2"], + default_host="securitycenter.googleapis.com", + ssl_credentials=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_grpc_transport_client_cert_source_for_mtls( + transport_class +): + cred = ga_credentials.AnonymousCredentials() + + # Check ssl_channel_credentials is used if provided. + with mock.patch.object(transport_class, "create_channel") as mock_create_channel: + mock_ssl_channel_creds = mock.Mock() + transport_class( + host="squid.clam.whelk", + credentials=cred, + ssl_channel_credentials=mock_ssl_channel_creds + ) + mock_create_channel.assert_called_once_with( + "squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_channel_creds, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + + # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls + # is used. + with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): + with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: + transport_class( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + expected_cert, expected_key = client_cert_source_callback() + mock_ssl_cred.assert_called_once_with( + certificate_chain=expected_cert, + private_key=expected_key + ) + +def test_security_center_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: + transports.SecurityCenterRestTransport ( + credentials=cred, + client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + +def test_security_center_rest_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='rest', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.AbstractOperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_no_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:443' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com' + ) + +@pytest.mark.parametrize("transport_name", [ + "grpc", + "grpc_asyncio", + "rest", +]) +def test_security_center_host_with_port(transport_name): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), + transport=transport_name, + ) + assert client.transport._host == ( + 'securitycenter.googleapis.com:8000' + if transport_name in ['grpc', 'grpc_asyncio'] + else 'https://securitycenter.googleapis.com:8000' + ) + +@pytest.mark.parametrize("transport_name", [ + "rest", +]) +def test_security_center_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = SecurityCenterClient( + credentials=creds1, + transport=transport_name, + ) + client2 = SecurityCenterClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.create_source._session + session2 = client2.transport.create_source._session + assert session1 != session2 + session1 = client1.transport.create_finding._session + session2 = client2.transport.create_finding._session + assert session1 != session2 + session1 = client1.transport.create_notification_config._session + session2 = client2.transport.create_notification_config._session + assert session1 != session2 + session1 = client1.transport.delete_notification_config._session + session2 = client2.transport.delete_notification_config._session + assert session1 != session2 + session1 = client1.transport.get_iam_policy._session + session2 = client2.transport.get_iam_policy._session + assert session1 != session2 + session1 = client1.transport.get_notification_config._session + session2 = client2.transport.get_notification_config._session + assert session1 != session2 + session1 = client1.transport.get_organization_settings._session + session2 = client2.transport.get_organization_settings._session + assert session1 != session2 + session1 = client1.transport.get_source._session + session2 = client2.transport.get_source._session + assert session1 != session2 + session1 = client1.transport.group_assets._session + session2 = client2.transport.group_assets._session + assert session1 != session2 + session1 = client1.transport.group_findings._session + session2 = client2.transport.group_findings._session + assert session1 != session2 + session1 = client1.transport.list_assets._session + session2 = client2.transport.list_assets._session + assert session1 != session2 + session1 = client1.transport.list_findings._session + session2 = client2.transport.list_findings._session + assert session1 != session2 + session1 = client1.transport.list_notification_configs._session + session2 = client2.transport.list_notification_configs._session + assert session1 != session2 + session1 = client1.transport.list_sources._session + session2 = client2.transport.list_sources._session + assert session1 != session2 + session1 = client1.transport.run_asset_discovery._session + session2 = client2.transport.run_asset_discovery._session + assert session1 != session2 + session1 = client1.transport.set_finding_state._session + session2 = client2.transport.set_finding_state._session + assert session1 != session2 + session1 = client1.transport.set_iam_policy._session + session2 = client2.transport.set_iam_policy._session + assert session1 != session2 + session1 = client1.transport.test_iam_permissions._session + session2 = client2.transport.test_iam_permissions._session + assert session1 != session2 + session1 = client1.transport.update_finding._session + session2 = client2.transport.update_finding._session + assert session1 != session2 + session1 = client1.transport.update_notification_config._session + session2 = client2.transport.update_notification_config._session + assert session1 != session2 + session1 = client1.transport.update_organization_settings._session + session2 = client2.transport.update_organization_settings._session + assert session1 != session2 + session1 = client1.transport.update_source._session + session2 = client2.transport.update_source._session + assert session1 != session2 + session1 = client1.transport.update_security_marks._session + session2 = client2.transport.update_security_marks._session + assert session1 != session2 +def test_security_center_grpc_transport_channel(): + channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +def test_security_center_grpc_asyncio_transport_channel(): + channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) + + # Check that channel is used if provided. + transport = transports.SecurityCenterGrpcAsyncIOTransport( + host="squid.clam.whelk", + channel=channel, + ) + assert transport.grpc_channel == channel + assert transport._host == "squid.clam.whelk:443" + assert transport._ssl_channel_credentials == None + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_client_cert_source( + transport_class +): + with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_ssl_cred = mock.Mock() + grpc_ssl_channel_cred.return_value = mock_ssl_cred + + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + + cred = ga_credentials.AnonymousCredentials() + with pytest.warns(DeprecationWarning): + with mock.patch.object(google.auth, 'default') as adc: + adc.return_value = (cred, None) + transport = transport_class( + host="squid.clam.whelk", + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=client_cert_source_callback, + ) + adc.assert_called_once() + + grpc_ssl_channel_cred.assert_called_once_with( + certificate_chain=b"cert bytes", private_key=b"key bytes" + ) + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + assert transport._ssl_channel_credentials == mock_ssl_cred + + +# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are +# removed from grpc/grpc_asyncio transport constructor. +@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) +def test_security_center_transport_channel_mtls_with_adc( + transport_class +): + mock_ssl_cred = mock.Mock() + with mock.patch.multiple( + "google.auth.transport.grpc.SslCredentials", + __init__=mock.Mock(return_value=None), + ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), + ): + with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: + mock_grpc_channel = mock.Mock() + grpc_create_channel.return_value = mock_grpc_channel + mock_cred = mock.Mock() + + with pytest.warns(DeprecationWarning): + transport = transport_class( + host="squid.clam.whelk", + credentials=mock_cred, + api_mtls_endpoint="mtls.squid.clam.whelk", + client_cert_source=None, + ) + + grpc_create_channel.assert_called_once_with( + "mtls.squid.clam.whelk:443", + credentials=mock_cred, + credentials_file=None, + scopes=None, + ssl_credentials=mock_ssl_cred, + quota_project_id=None, + options=[ + ("grpc.max_send_message_length", -1), + ("grpc.max_receive_message_length", -1), + ], + ) + assert transport.grpc_channel == mock_grpc_channel + + +def test_security_center_grpc_lro_client(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_security_center_grpc_lro_async_client(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport='grpc_asyncio', + ) + transport = client.transport + + # Ensure that we have a api-core operations client. + assert isinstance( + transport.operations_client, + operations_v1.OperationsAsyncClient, + ) + + # Ensure that subsequent calls to the property send the exact same object. + assert transport.operations_client is transport.operations_client + + +def test_asset_path(): + organization = "squid" + asset = "clam" + expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.asset_path(organization, asset) + assert expected == actual + + +def test_parse_asset_path(): + expected = { + "organization": "whelk", + "asset": "octopus", + } + path = SecurityCenterClient.asset_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_asset_path(path) + assert expected == actual + +def test_finding_path(): + organization = "oyster" + source = "nudibranch" + finding = "cuttlefish" + expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) + actual = SecurityCenterClient.finding_path(organization, source, finding) + assert expected == actual + + +def test_parse_finding_path(): + expected = { + "organization": "mussel", + "source": "winkle", + "finding": "nautilus", + } + path = SecurityCenterClient.finding_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_finding_path(path) + assert expected == actual + +def test_notification_config_path(): + organization = "scallop" + notification_config = "abalone" + expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) + actual = SecurityCenterClient.notification_config_path(organization, notification_config) + assert expected == actual + + +def test_parse_notification_config_path(): + expected = { + "organization": "squid", + "notification_config": "clam", + } + path = SecurityCenterClient.notification_config_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_notification_config_path(path) + assert expected == actual + +def test_organization_settings_path(): + organization = "whelk" + expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) + actual = SecurityCenterClient.organization_settings_path(organization) + assert expected == actual + + +def test_parse_organization_settings_path(): + expected = { + "organization": "octopus", + } + path = SecurityCenterClient.organization_settings_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_organization_settings_path(path) + assert expected == actual + +def test_security_marks_path(): + organization = "oyster" + asset = "nudibranch" + expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) + actual = SecurityCenterClient.security_marks_path(organization, asset) + assert expected == actual + + +def test_parse_security_marks_path(): + expected = { + "organization": "cuttlefish", + "asset": "mussel", + } + path = SecurityCenterClient.security_marks_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_marks_path(path) + assert expected == actual + +def test_source_path(): + organization = "winkle" + source = "nautilus" + expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) + actual = SecurityCenterClient.source_path(organization, source) + assert expected == actual + + +def test_parse_source_path(): + expected = { + "organization": "scallop", + "source": "abalone", + } + path = SecurityCenterClient.source_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_source_path(path) + assert expected == actual + +def test_topic_path(): + project = "squid" + topic = "clam" + expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) + actual = SecurityCenterClient.topic_path(project, topic) + assert expected == actual + + +def test_parse_topic_path(): + expected = { + "project": "whelk", + "topic": "octopus", + } + path = SecurityCenterClient.topic_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_topic_path(path) + assert expected == actual + +def test_common_billing_account_path(): + billing_account = "oyster" + expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) + actual = SecurityCenterClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "nudibranch", + } + path = SecurityCenterClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_billing_account_path(path) + assert expected == actual + +def test_common_folder_path(): + folder = "cuttlefish" + expected = "folders/{folder}".format(folder=folder, ) + actual = SecurityCenterClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "mussel", + } + path = SecurityCenterClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_folder_path(path) + assert expected == actual + +def test_common_organization_path(): + organization = "winkle" + expected = "organizations/{organization}".format(organization=organization, ) + actual = SecurityCenterClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nautilus", + } + path = SecurityCenterClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_organization_path(path) + assert expected == actual + +def test_common_project_path(): + project = "scallop" + expected = "projects/{project}".format(project=project, ) + actual = SecurityCenterClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "abalone", + } + path = SecurityCenterClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_project_path(path) + assert expected == actual + +def test_common_location_path(): + project = "squid" + location = "clam" + expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) + actual = SecurityCenterClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "whelk", + "location": "octopus", + } + path = SecurityCenterClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: + transport_class = SecurityCenterClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + +@pytest.mark.asyncio +async def test_transport_close_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc_asyncio", + ) + with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: + async with client: + close.assert_not_called() + close.assert_called_once() + + +def test_transport_close(): + transports = { + "rest": "_session", + "grpc": "_grpc_channel", + } + + for transport, close_name in transports.items(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: + with client: + close.assert_not_called() + close.assert_called_once() + +def test_client_ctx(): + transports = [ + 'rest', + 'grpc', + ] + for transport in transports: + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + +@pytest.mark.parametrize("client_class,transport_class", [ + (SecurityCenterClient, transports.SecurityCenterGrpcTransport), + (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), +]) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) From 0de0e9f675a219b2d48638e52cc55aca5e7235d6 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Tue, 11 Apr 2023 20:51:59 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- google/cloud/securitycenter/__init__.py | 34 + google/cloud/securitycenter_v1/__init__.py | 32 + .../securitycenter_v1/gapic_metadata.json | 120 + .../services/security_center/async_client.py | 1361 +- .../services/security_center/client.py | 1351 +- .../services/security_center/pagers.py | 473 + .../security_center/transports/base.py | 210 +- .../security_center/transports/grpc.py | 297 +- .../transports/grpc_asyncio.py | 311 +- .../security_center/transports/rest.py | 1500 +- .../cloud/securitycenter_v1/types/__init__.py | 30 + .../types/bigquery_export.py | 14 +- .../types/contact_details.py | 4 +- .../cloud/securitycenter_v1/types/database.py | 2 +- ...security_health_analytics_custom_module.py | 6 +- .../securitycenter_v1/types/exfiltration.py | 2 +- .../cloud/securitycenter_v1/types/finding.py | 10 +- .../securitycenter_v1/types/indicator.py | 15 +- .../securitycenter_v1/types/kernel_rootkit.py | 27 +- .../securitycenter_v1/types/kubernetes.py | 7 +- ...security_health_analytics_custom_config.py | 15 +- ...security_health_analytics_custom_module.py | 8 +- .../types/securitycenter_service.py | 328 +- owl-bot-staging/v1/.coveragerc | 13 - owl-bot-staging/v1/.flake8 | 33 - owl-bot-staging/v1/MANIFEST.in | 2 - owl-bot-staging/v1/README.rst | 49 - owl-bot-staging/v1/docs/conf.py | 376 - owl-bot-staging/v1/docs/index.rst | 7 - .../securitycenter_v1/security_center.rst | 10 - .../v1/docs/securitycenter_v1/services.rst | 6 - .../v1/docs/securitycenter_v1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 215 - .../cloud/securitycenter/gapic_version.py | 16 - .../v1/google/cloud/securitycenter/py.typed | 2 - .../cloud/securitycenter_v1/__init__.py | 216 - .../securitycenter_v1/gapic_metadata.json | 688 - .../cloud/securitycenter_v1/gapic_version.py | 16 - .../google/cloud/securitycenter_v1/py.typed | 2 - .../securitycenter_v1/services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 5701 ---- .../services/security_center/client.py | 5894 ---- .../services/security_center/pagers.py | 1355 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 925 - .../security_center/transports/grpc.py | 1555 - .../transports/grpc_asyncio.py | 1554 - .../security_center/transports/rest.py | 6237 ---- .../cloud/securitycenter_v1/types/__init__.py | 272 - .../cloud/securitycenter_v1/types/access.py | 190 - .../cloud/securitycenter_v1/types/asset.py | 227 - .../types/bigquery_export.py | 135 - .../securitycenter_v1/types/compliance.py | 60 - .../securitycenter_v1/types/connection.py | 97 - .../types/contact_details.py | 61 - .../securitycenter_v1/types/container.py | 72 - .../cloud/securitycenter_v1/types/database.py | 83 - .../securitycenter_v1/types/exfiltration.py | 89 - .../types/external_system.py | 81 - .../cloud/securitycenter_v1/types/file.py | 84 - .../cloud/securitycenter_v1/types/finding.py | 542 - .../cloud/securitycenter_v1/types/folder.py | 54 - .../securitycenter_v1/types/iam_binding.py | 76 - .../securitycenter_v1/types/indicator.py | 164 - .../securitycenter_v1/types/kernel_rootkit.py | 108 - .../securitycenter_v1/types/kubernetes.py | 338 - .../cloud/securitycenter_v1/types/label.py | 53 - .../securitycenter_v1/types/mitre_attack.py | 252 - .../securitycenter_v1/types/mute_config.py | 120 - .../types/notification_config.py | 127 - .../types/notification_message.py | 70 - .../types/organization_settings.py | 123 - .../cloud/securitycenter_v1/types/process.py | 135 - .../cloud/securitycenter_v1/types/resource.py | 96 - .../types/run_asset_discovery_response.py | 76 - .../securitycenter_v1/types/security_marks.py | 80 - .../types/securitycenter_service.py | 2456 -- .../cloud/securitycenter_v1/types/source.py | 87 - .../securitycenter_v1/types/vulnerability.py | 353 - owl-bot-staging/v1/mypy.ini | 3 - owl-bot-staging/v1/noxfile.py | 184 - ...ecurity_center_bulk_mute_findings_async.py | 56 - ...security_center_bulk_mute_findings_sync.py | 56 - ...ty_center_create_big_query_export_async.py | 53 - ...ity_center_create_big_query_export_sync.py | 53 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...ecurity_center_create_mute_config_async.py | 57 - ...security_center_create_mute_config_sync.py | 57 - ...center_create_notification_config_async.py | 53 - ..._center_create_notification_config_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...ty_center_delete_big_query_export_async.py | 50 - ...ity_center_delete_big_query_export_sync.py | 50 - ...ecurity_center_delete_mute_config_async.py | 50 - ...security_center_delete_mute_config_sync.py | 50 - ...center_delete_notification_config_async.py | 50 - ..._center_delete_notification_config_sync.py | 50 - ...urity_center_get_big_query_export_async.py | 52 - ...curity_center_get_big_query_export_sync.py | 52 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ...d_security_center_get_mute_config_async.py | 52 - ...ed_security_center_get_mute_config_sync.py | 52 - ...ty_center_get_notification_config_async.py | 52 - ...ity_center_get_notification_config_sync.py | 52 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ity_center_list_big_query_exports_async.py | 53 - ...rity_center_list_big_query_exports_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ...security_center_list_mute_configs_async.py | 53 - ..._security_center_list_mute_configs_sync.py | 53 - ..._center_list_notification_configs_async.py | 53 - ...y_center_list_notification_configs_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...enerated_security_center_set_mute_async.py | 53 - ...generated_security_center_set_mute_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ty_center_update_big_query_export_async.py | 51 - ...ity_center_update_big_query_export_sync.py | 51 - ...ity_center_update_external_system_async.py | 51 - ...rity_center_update_external_system_sync.py | 51 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...ecurity_center_update_mute_config_async.py | 55 - ...security_center_update_mute_config_sync.py | 55 - ...center_update_notification_config_async.py | 51 - ..._center_update_notification_config_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...tadata_google.cloud.securitycenter.v1.json | 7211 ----- .../fixup_securitycenter_v1_keywords.py | 219 - owl-bot-staging/v1/setup.py | 91 - .../v1/testing/constraints-3.10.txt | 7 - .../v1/testing/constraints-3.11.txt | 7 - .../v1/testing/constraints-3.12.txt | 7 - .../v1/testing/constraints-3.7.txt | 10 - .../v1/testing/constraints-3.8.txt | 7 - .../v1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1/tests/__init__.py | 16 - owl-bot-staging/v1/tests/unit/__init__.py | 16 - .../v1/tests/unit/gapic/__init__.py | 16 - .../unit/gapic/securitycenter_v1/__init__.py | 16 - .../securitycenter_v1/test_security_center.py | 26225 ---------------- owl-bot-staging/v1beta1/.coveragerc | 13 - owl-bot-staging/v1beta1/.flake8 | 33 - owl-bot-staging/v1beta1/MANIFEST.in | 2 - owl-bot-staging/v1beta1/README.rst | 49 - owl-bot-staging/v1beta1/docs/conf.py | 376 - owl-bot-staging/v1beta1/docs/index.rst | 7 - .../security_center.rst | 10 - .../docs/securitycenter_v1beta1/services.rst | 6 - .../docs/securitycenter_v1beta1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 81 - .../cloud/securitycenter/gapic_version.py | 16 - .../google/cloud/securitycenter/py.typed | 2 - .../cloud/securitycenter_v1beta1/__init__.py | 82 - .../gapic_metadata.json | 298 - .../securitycenter_v1beta1/gapic_version.py | 16 - .../cloud/securitycenter_v1beta1/py.typed | 2 - .../services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 2406 -- .../services/security_center/client.py | 2585 -- .../services/security_center/pagers.py | 625 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 465 - .../security_center/transports/grpc.py | 754 - .../transports/grpc_asyncio.py | 753 - .../security_center/transports/rest.py | 2570 -- .../securitycenter_v1beta1/types/__init__.py | 86 - .../securitycenter_v1beta1/types/asset.py | 155 - .../securitycenter_v1beta1/types/finding.py | 164 - .../types/organization_settings.py | 115 - .../types/run_asset_discovery_response.py | 76 - .../types/security_marks.py | 68 - .../types/securitycenter_service.py | 1053 - .../securitycenter_v1beta1/types/source.py | 76 - owl-bot-staging/v1beta1/mypy.ini | 3 - owl-bot-staging/v1beta1/noxfile.py | 184 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...a_google.cloud.securitycenter.v1beta1.json | 2945 -- .../fixup_securitycenter_v1beta1_keywords.py | 193 - owl-bot-staging/v1beta1/setup.py | 91 - .../v1beta1/testing/constraints-3.10.txt | 7 - .../v1beta1/testing/constraints-3.11.txt | 7 - .../v1beta1/testing/constraints-3.12.txt | 7 - .../v1beta1/testing/constraints-3.7.txt | 10 - .../v1beta1/testing/constraints-3.8.txt | 7 - .../v1beta1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1beta1/tests/__init__.py | 16 - .../v1beta1/tests/unit/__init__.py | 16 - .../v1beta1/tests/unit/gapic/__init__.py | 16 - .../gapic/securitycenter_v1beta1/__init__.py | 16 - .../test_security_center.py | 10951 ------- owl-bot-staging/v1p1beta1/.coveragerc | 13 - owl-bot-staging/v1p1beta1/.flake8 | 33 - owl-bot-staging/v1p1beta1/MANIFEST.in | 2 - owl-bot-staging/v1p1beta1/README.rst | 49 - owl-bot-staging/v1p1beta1/docs/conf.py | 376 - owl-bot-staging/v1p1beta1/docs/index.rst | 7 - .../security_center.rst | 10 - .../securitycenter_v1p1beta1/services.rst | 6 - .../docs/securitycenter_v1p1beta1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 101 - .../cloud/securitycenter/gapic_version.py | 16 - .../google/cloud/securitycenter/py.typed | 2 - .../securitycenter_v1p1beta1/__init__.py | 102 - .../gapic_metadata.json | 373 - .../securitycenter_v1p1beta1/gapic_version.py | 16 - .../cloud/securitycenter_v1p1beta1/py.typed | 2 - .../services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 3083 -- .../services/security_center/client.py | 3264 -- .../services/security_center/pagers.py | 746 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 552 - .../security_center/transports/grpc.py | 889 - .../transports/grpc_asyncio.py | 888 - .../security_center/transports/rest.py | 3232 -- .../types/__init__.py | 114 - .../securitycenter_v1p1beta1/types/asset.py | 227 - .../securitycenter_v1p1beta1/types/finding.py | 208 - .../securitycenter_v1p1beta1/types/folder.py | 54 - .../types/notification_config.py | 142 - .../types/notification_message.py | 69 - .../types/organization_settings.py | 123 - .../types/resource.py | 85 - .../types/run_asset_discovery_response.py | 76 - .../types/security_marks.py | 80 - .../types/securitycenter_service.py | 1641 - .../securitycenter_v1p1beta1/types/source.py | 87 - owl-bot-staging/v1p1beta1/mypy.ini | 3 - owl-bot-staging/v1p1beta1/noxfile.py | 184 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...center_create_notification_config_async.py | 53 - ..._center_create_notification_config_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...center_delete_notification_config_async.py | 50 - ..._center_delete_notification_config_sync.py | 50 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ...ty_center_get_notification_config_async.py | 52 - ...ity_center_get_notification_config_sync.py | 52 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ..._center_list_notification_configs_async.py | 53 - ...y_center_list_notification_configs_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...center_update_notification_config_async.py | 51 - ..._center_update_notification_config_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...google.cloud.securitycenter.v1p1beta1.json | 3808 --- ...fixup_securitycenter_v1p1beta1_keywords.py | 198 - owl-bot-staging/v1p1beta1/setup.py | 91 - .../v1p1beta1/testing/constraints-3.10.txt | 7 - .../v1p1beta1/testing/constraints-3.11.txt | 7 - .../v1p1beta1/testing/constraints-3.12.txt | 7 - .../v1p1beta1/testing/constraints-3.7.txt | 10 - .../v1p1beta1/testing/constraints-3.8.txt | 7 - .../v1p1beta1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1p1beta1/tests/__init__.py | 16 - .../v1p1beta1/tests/unit/__init__.py | 16 - .../v1p1beta1/tests/unit/gapic/__init__.py | 16 - .../securitycenter_v1p1beta1/__init__.py | 16 - .../test_security_center.py | 14070 --------- ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...tadata_google.cloud.securitycenter.v1.json | 2016 +- ...a_google.cloud.securitycenter.v1beta1.json | 2 +- ...google.cloud.securitycenter.v1p1beta1.json | 2 +- scripts/fixup_securitycenter_v1_keywords.py | 8 + .../securitycenter_v1/test_security_center.py | 17557 +++++++---- 375 files changed, 19197 insertions(+), 143116 deletions(-) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py (97%) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py (95%) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py (98%) delete mode 100644 owl-bot-staging/v1/.coveragerc delete mode 100644 owl-bot-staging/v1/.flake8 delete mode 100644 owl-bot-staging/v1/MANIFEST.in delete mode 100644 owl-bot-staging/v1/README.rst delete mode 100644 owl-bot-staging/v1/docs/conf.py delete mode 100644 owl-bot-staging/v1/docs/index.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/services.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/types.rst delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py delete mode 100644 owl-bot-staging/v1/mypy.ini delete mode 100644 owl-bot-staging/v1/noxfile.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json delete mode 100644 owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py delete mode 100644 owl-bot-staging/v1/setup.py delete mode 100644 owl-bot-staging/v1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1/tests/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py delete mode 100644 owl-bot-staging/v1beta1/.coveragerc delete mode 100644 owl-bot-staging/v1beta1/.flake8 delete mode 100644 owl-bot-staging/v1beta1/MANIFEST.in delete mode 100644 owl-bot-staging/v1beta1/README.rst delete mode 100644 owl-bot-staging/v1beta1/docs/conf.py delete mode 100644 owl-bot-staging/v1beta1/docs/index.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py delete mode 100644 owl-bot-staging/v1beta1/mypy.ini delete mode 100644 owl-bot-staging/v1beta1/noxfile.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json delete mode 100644 owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py delete mode 100644 owl-bot-staging/v1beta1/setup.py delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1beta1/tests/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py delete mode 100644 owl-bot-staging/v1p1beta1/.coveragerc delete mode 100644 owl-bot-staging/v1p1beta1/.flake8 delete mode 100644 owl-bot-staging/v1p1beta1/MANIFEST.in delete mode 100644 owl-bot-staging/v1p1beta1/README.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/conf.py delete mode 100644 owl-bot-staging/v1p1beta1/docs/index.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py delete mode 100644 owl-bot-staging/v1p1beta1/mypy.ini delete mode 100644 owl-bot-staging/v1p1beta1/noxfile.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json delete mode 100644 owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py delete mode 100644 owl-bot-staging/v1p1beta1/setup.py delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1p1beta1/tests/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py (100%) diff --git a/google/cloud/securitycenter/__init__.py b/google/cloud/securitycenter/__init__.py index 0605464d..b51a30f1 100644 --- a/google/cloud/securitycenter/__init__.py +++ b/google/cloud/securitycenter/__init__.py @@ -36,6 +36,9 @@ from google.cloud.securitycenter_v1.types.contact_details import Contact, ContactDetails from google.cloud.securitycenter_v1.types.container import Container from google.cloud.securitycenter_v1.types.database import Database +from google.cloud.securitycenter_v1.types.effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from google.cloud.securitycenter_v1.types.exfiltration import ( ExfilResource, Exfiltration, @@ -63,6 +66,12 @@ from google.cloud.securitycenter_v1.types.run_asset_discovery_response import ( RunAssetDiscoveryResponse, ) +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_config import ( + CustomConfig, +) +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_module import ( + SecurityHealthAnalyticsCustomModule, +) from google.cloud.securitycenter_v1.types.security_marks import SecurityMarks from google.cloud.securitycenter_v1.types.securitycenter_service import ( BulkMuteFindingsRequest, @@ -71,14 +80,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -89,12 +102,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -106,6 +125,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -131,6 +151,7 @@ "ContactDetails", "Container", "Database", + "EffectiveSecurityHealthAnalyticsCustomModule", "ExfilResource", "Exfiltration", "ExternalSystem", @@ -151,6 +172,8 @@ "Process", "Resource", "RunAssetDiscoveryResponse", + "CustomConfig", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "BulkMuteFindingsRequest", "BulkMuteFindingsResponse", @@ -158,14 +181,18 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -176,12 +203,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "RunAssetDiscoveryRequest", @@ -193,6 +226,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Source", diff --git a/google/cloud/securitycenter_v1/__init__.py b/google/cloud/securitycenter_v1/__init__.py index 82e69b65..7b1268e0 100644 --- a/google/cloud/securitycenter_v1/__init__.py +++ b/google/cloud/securitycenter_v1/__init__.py @@ -27,6 +27,9 @@ from .types.contact_details import Contact, ContactDetails from .types.container import Container from .types.database import Database +from .types.effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from .types.exfiltration import ExfilResource, Exfiltration from .types.external_system import ExternalSystem from .types.file import File @@ -45,6 +48,10 @@ from .types.process import EnvironmentVariable, Process from .types.resource import Resource from .types.run_asset_discovery_response import RunAssetDiscoveryResponse +from .types.security_health_analytics_custom_config import CustomConfig +from .types.security_health_analytics_custom_module import ( + SecurityHealthAnalyticsCustomModule, +) from .types.security_marks import SecurityMarks from .types.securitycenter_service import ( BulkMuteFindingsRequest, @@ -53,14 +60,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -71,12 +82,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -88,6 +105,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -110,13 +128,17 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", + "CustomConfig", "Cve", "Cvssv3", "Database", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", + "EffectiveSecurityHealthAnalyticsCustomModule", "EnvironmentVariable", "ExfilResource", "Exfiltration", @@ -126,9 +148,11 @@ "Folder", "Geolocation", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -144,12 +168,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "MitreAttack", @@ -163,6 +193,7 @@ "RunAssetDiscoveryRequest", "RunAssetDiscoveryResponse", "SecurityCenterClient", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "ServiceAccountDelegationInfo", "SetFindingStateRequest", @@ -174,6 +205,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Vulnerability", diff --git a/google/cloud/securitycenter_v1/gapic_metadata.json b/google/cloud/securitycenter_v1/gapic_metadata.json index 17110f05..5c23812a 100644 --- a/google/cloud/securitycenter_v1/gapic_metadata.json +++ b/google/cloud/securitycenter_v1/gapic_metadata.json @@ -35,6 +35,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -55,11 +60,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -80,6 +95,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -105,6 +125,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -120,6 +150,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -180,6 +215,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" @@ -220,6 +260,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -240,11 +285,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -265,6 +320,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -290,6 +350,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -305,6 +375,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -365,6 +440,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" @@ -405,6 +485,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -425,11 +510,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -450,6 +545,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -475,6 +575,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -490,6 +600,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -550,6 +665,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" diff --git a/google/cloud/securitycenter_v1/services/security_center/async_client.py b/google/cloud/securitycenter_v1/services/security_center/async_client.py index b7d50223..1a7a5399 100644 --- a/google/cloud/securitycenter_v1/services/security_center/async_client.py +++ b/google/cloud/securitycenter_v1/services/security_center/async_client.py @@ -59,8 +59,14 @@ connection, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -68,7 +74,6 @@ kubernetes, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -76,6 +81,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import file from google.cloud.securitycenter_v1.types import finding @@ -109,6 +118,12 @@ class SecurityCenterAsyncClient: parse_big_query_export_path = staticmethod( SecurityCenterClient.parse_big_query_export_path ) + effective_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.effective_security_health_analytics_custom_module_path + ) + parse_effective_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path + ) external_system_path = staticmethod(SecurityCenterClient.external_system_path) parse_external_system_path = staticmethod( SecurityCenterClient.parse_external_system_path @@ -129,6 +144,12 @@ class SecurityCenterAsyncClient: parse_organization_settings_path = staticmethod( SecurityCenterClient.parse_organization_settings_path ) + security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.security_health_analytics_custom_module_path + ) + parse_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.parse_security_health_analytics_custom_module_path + ) security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) parse_security_marks_path = staticmethod( SecurityCenterClient.parse_security_marks_path @@ -422,6 +443,151 @@ async def sample_bulk_mute_findings(): # Done; return the response. return response + async def create_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for creating security + health analytics custom modules. + parent (:class:`str`): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def create_source( self, request: Optional[ @@ -1142,6 +1308,112 @@ async def sample_delete_notification_config(): metadata=metadata, ) + async def delete_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + await client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for deleting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + async def get_big_query_export( self, request: Optional[ @@ -1771,16 +2043,22 @@ async def sample_get_organization_settings(): # Done; return the response. return response - async def get_source( + async def get_effective_security_health_analytics_custom_module( self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + request: Optional[ + Union[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, *, name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -1793,28 +2071,33 @@ async def get_source( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_get_source(): + async def sample_get_effective_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( name="name_value", ) # Make the request - response = await client.get_source(request=request) + response = await client.get_effective_security_health_analytics_custom_module(request=request) # Handle the response print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. + request (Optional[Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting effective + security health analytics custom + modules. name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -1826,13 +2109,21 @@ async def sample_get_source(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. """ # Create or coerce a protobuf request object. @@ -1845,7 +2136,9 @@ async def sample_get_source(): "the individual field arguments should be set." ) - request = securitycenter_service.GetSourceRequest(request) + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -1855,7 +2148,7 @@ async def sample_get_source(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, + self._client._transport.get_effective_security_health_analytics_custom_module, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -1887,18 +2180,21 @@ async def sample_get_source(): # Done; return the response. return response - async def group_assets( + async def get_security_health_analytics_custom_module( self, request: Optional[ - Union[securitycenter_service.GroupAssetsRequest, dict] + Union[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] ] = None, *, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -1911,27 +2207,36 @@ async def group_assets( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_group_assets(): + async def sample_get_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", ) # Make the request - page_result = client.group_assets(request=request) + response = await client.get_security_health_analytics_custom_module(request=request) # Handle the response - async for response in page_result: - print(response) + print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1939,21 +2244,42 @@ async def sample_group_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest( + request + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, + self._client._transport.get_security_health_analytics_custom_module, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -1962,7 +2288,221 @@ async def sample_group_assets(): core_exceptions.DeadlineExceeded, core_exceptions.ServiceUnavailable, ), - deadline=480.0, + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_source( + self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): + The request object. Request message for getting a source. + name (:class:`str`): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.GetSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_source, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_assets( + self, + request: Optional[ + Union[securitycenter_service.GroupAssetsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsAsyncPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_assets, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, ), default_timeout=480.0, client_info=DEFAULT_CLIENT_INFO, @@ -2196,9 +2736,371 @@ async def sample_list_assets(): async for response in page_result: print(response) - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_assets, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_descendant_security_health_analytics_custom_modules( + self, + request: Optional[ + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (:class:`str`): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_findings( + self, + request: Optional[ + Union[securitycenter_service.ListFindingsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsAsyncPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_findings, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_mute_configs( + self, + request: Optional[ + Union[securitycenter_service.ListMuteConfigsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsAsyncPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (:class:`str`): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2206,31 +3108,36 @@ async def sample_list_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: + Response message for listing mute + configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListMuteConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( - initial=0.1, - maximum=60.0, - multiplier=1.3, - predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, + self._client._transport.list_mute_configs, + default_timeout=None, client_info=DEFAULT_CLIENT_INFO, ) @@ -2250,7 +3157,7 @@ async def sample_list_assets(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( + response = pagers.ListMuteConfigsAsyncPager( method=rpc, request=request, response=response, @@ -2260,20 +3167,18 @@ async def sample_list_assets(): # Done; return the response. return response - async def list_findings( + async def list_notification_configs( self, request: Optional[ - Union[securitycenter_service.ListFindingsRequest, dict] + Union[securitycenter_service.ListNotificationConfigsRequest, dict] ] = None, *, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings + ) -> pagers.ListNotificationConfigsAsyncPager: + r"""Lists notification configs. .. code-block:: python @@ -2286,25 +3191,35 @@ async def list_findings( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_findings(): + async def sample_list_notification_configs(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( + request = securitycenter_v1.ListNotificationConfigsRequest( parent="parent_value", ) # Make the request - page_result = client.list_findings(request=request) + page_result = client.list_notification_configs(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): + The request object. Request message for listing + notification configs. + parent (:class:`str`): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2312,21 +3227,35 @@ async def sample_list_findings(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: Response message for listing - findings. + notification configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListNotificationConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, + self._client._transport.list_notification_configs, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -2335,9 +3264,9 @@ async def sample_list_findings(): core_exceptions.DeadlineExceeded, core_exceptions.ServiceUnavailable, ), - deadline=480.0, + deadline=60.0, ), - default_timeout=480.0, + default_timeout=60.0, client_info=DEFAULT_CLIENT_INFO, ) @@ -2357,7 +3286,7 @@ async def sample_list_findings(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( + response = pagers.ListNotificationConfigsAsyncPager( method=rpc, request=request, response=response, @@ -2367,18 +3296,25 @@ async def sample_list_findings(): # Done; return the response. return response - async def list_mute_configs( + async def list_effective_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListMuteConfigsRequest, dict] + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsAsyncPager: - r"""Lists mute configs. + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. .. code-block:: python @@ -2391,32 +3327,34 @@ async def list_mute_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_mute_configs(): + async def sample_list_effective_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_mute_configs(request=request) + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing effective + security health analytics custom + modules. parent (:class:`str`): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2428,9 +3366,10 @@ async def sample_list_mute_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: - Response message for listing mute - configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + effective security health analytics + custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2446,7 +3385,9 @@ async def sample_list_mute_configs(): "the individual field arguments should be set." ) - request = securitycenter_service.ListMuteConfigsRequest(request) + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -2456,8 +3397,18 @@ async def sample_list_mute_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_mute_configs, - default_timeout=None, + self._client._transport.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, client_info=DEFAULT_CLIENT_INFO, ) @@ -2477,7 +3428,7 @@ async def sample_list_mute_configs(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListMuteConfigsAsyncPager( + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager( method=rpc, request=request, response=response, @@ -2487,18 +3438,25 @@ async def sample_list_mute_configs(): # Done; return the response. return response - async def list_notification_configs( + async def list_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListNotificationConfigsRequest, dict] + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. .. code-block:: python @@ -2511,31 +3469,33 @@ async def list_notification_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_notification_configs(): + async def sample_list_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_notification_configs(request=request) + page_result = client.list_security_health_analytics_custom_modules(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing security + health analytics custom modules. parent (:class:`str`): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2547,9 +3507,9 @@ async def sample_list_notification_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing security + health analytics custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2565,7 +3525,11 @@ async def sample_list_notification_configs(): "the individual field arguments should be set." ) - request = securitycenter_service.ListNotificationConfigsRequest(request) + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -2575,7 +3539,7 @@ async def sample_list_notification_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, + self._client._transport.list_security_health_analytics_custom_modules, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -2606,7 +3570,7 @@ async def sample_list_notification_configs(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( + response = pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager( method=rpc, request=request, response=response, @@ -4009,6 +4973,151 @@ async def sample_update_organization_settings(): # Done; return the response. return response + async def update_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = await client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [security_health_analytics_custom_module, update_mask] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ( + "security_health_analytics_custom_module.name", + request.security_health_analytics_custom_module.name, + ), + ) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def update_source( self, request: Optional[ diff --git a/google/cloud/securitycenter_v1/services/security_center/client.py b/google/cloud/securitycenter_v1/services/security_center/client.py index 9175c80c..a5124395 100644 --- a/google/cloud/securitycenter_v1/services/security_center/client.py +++ b/google/cloud/securitycenter_v1/services/security_center/client.py @@ -63,8 +63,14 @@ connection, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -72,7 +78,6 @@ kubernetes, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -80,6 +85,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import file from google.cloud.securitycenter_v1.types import finding @@ -261,6 +270,28 @@ def parse_big_query_export_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def effective_security_health_analytics_custom_module_path( + organization: str, + effective_custom_module: str, + ) -> str: + """Returns a fully-qualified effective_security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format( + organization=organization, + effective_custom_module=effective_custom_module, + ) + + @staticmethod + def parse_effective_security_health_analytics_custom_module_path( + path: str, + ) -> Dict[str, str]: + """Parses a effective_security_health_analytics_custom_module path into its component segments.""" + m = re.match( + r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/effectiveCustomModules/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def external_system_path( organization: str, @@ -366,6 +397,26 @@ def parse_organization_settings_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def security_health_analytics_custom_module_path( + organization: str, + custom_module: str, + ) -> str: + """Returns a fully-qualified security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format( + organization=organization, + custom_module=custom_module, + ) + + @staticmethod + def parse_security_health_analytics_custom_module_path(path: str) -> Dict[str, str]: + """Parses a security_health_analytics_custom_module path into its component segments.""" + m = re.match( + r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/customModules/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def security_marks_path( organization: str, @@ -797,6 +848,156 @@ def sample_bulk_mute_findings(): # Done; return the response. return response + def create_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for creating security + health analytics custom modules. + parent (str): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.create_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def create_source( self, request: Optional[ @@ -1525,6 +1726,117 @@ def sample_delete_notification_config(): metadata=metadata, ) + def delete_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for deleting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.delete_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + def get_big_query_export( self, request: Optional[ @@ -2125,16 +2437,22 @@ def sample_get_organization_settings(): # Done; return the response. return response - def get_source( + def get_effective_security_health_analytics_custom_module( self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + request: Optional[ + Union[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, *, name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -2147,28 +2465,33 @@ def get_source( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_get_source(): + def sample_get_effective_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( name="name_value", ) # Make the request - response = client.get_source(request=request) + response = client.get_effective_security_health_analytics_custom_module(request=request) # Handle the response print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. + request (Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting effective + security health analytics custom + modules. name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -2180,13 +2503,21 @@ def sample_get_source(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. """ # Create or coerce a protobuf request object. @@ -2200,11 +2531,16 @@ def sample_get_source(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. + # in a securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) + if not isinstance( + request, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + ): + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if name is not None: @@ -2212,7 +2548,9 @@ def sample_get_source(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] + rpc = self._transport._wrapped_methods[ + self._transport.get_effective_security_health_analytics_custom_module + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2231,18 +2569,21 @@ def sample_get_source(): # Done; return the response. return response - def group_assets( + def get_security_health_analytics_custom_module( self, request: Optional[ - Union[securitycenter_service.GroupAssetsRequest, dict] + Union[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] ] = None, *, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -2255,22 +2596,253 @@ def group_assets( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_group_assets(): + def sample_get_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", ) # Make the request - page_result = client.group_assets(request=request) + response = client.get_security_health_analytics_custom_module(request=request) # Handle the response - for response in page_result: - print(response) + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.get_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_source( + self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): + The request object. Request message for getting a source. + name (str): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSourceRequest): + request = securitycenter_service.GetSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_assets( + self, + request: Optional[ + Union[securitycenter_service.GroupAssetsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) Args: request (Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]): @@ -2521,9 +3093,348 @@ def sample_list_assets(): for response in page_result: print(response) - Args: - request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. + Args: + request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListAssetsRequest): + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_descendant_security_health_analytics_custom_modules( + self, + request: Optional[ + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (str): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ): + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_descendant_security_health_analytics_custom_modules + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_findings( + self, + request: Optional[ + Union[securitycenter_service.ListFindingsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListFindingsRequest): + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_mute_configs( + self, + request: Optional[ + Union[securitycenter_service.ListMuteConfigsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (str): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2531,24 +3442,38 @@ def sample_list_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: + Response message for listing mute + configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. + # in a securitycenter_service.ListMuteConfigsRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) + if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): + request = securitycenter_service.ListMuteConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] + rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] # Certain fields should be provided within the metadata header; # add these here. @@ -2566,7 +3491,7 @@ def sample_list_assets(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListAssetsPager( + response = pagers.ListMuteConfigsPager( method=rpc, request=request, response=response, @@ -2576,20 +3501,18 @@ def sample_list_assets(): # Done; return the response. return response - def list_findings( + def list_notification_configs( self, request: Optional[ - Union[securitycenter_service.ListFindingsRequest, dict] + Union[securitycenter_service.ListNotificationConfigsRequest, dict] ] = None, *, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings + ) -> pagers.ListNotificationConfigsPager: + r"""Lists notification configs. .. code-block:: python @@ -2602,25 +3525,35 @@ def list_findings( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_findings(): + def sample_list_notification_configs(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( + request = securitycenter_v1.ListNotificationConfigsRequest( parent="parent_value", ) # Make the request - page_result = client.list_findings(request=request) + page_result = client.list_notification_configs(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. + request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): + The request object. Request message for listing + notification configs. + parent (str): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2628,25 +3561,42 @@ def sample_list_findings(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: Response message for listing - findings. + notification configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. + # in a securitycenter_service.ListNotificationConfigsRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) + if not isinstance( + request, securitycenter_service.ListNotificationConfigsRequest + ): + request = securitycenter_service.ListNotificationConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] + rpc = self._transport._wrapped_methods[ + self._transport.list_notification_configs + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2664,7 +3614,7 @@ def sample_list_findings(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListFindingsPager( + response = pagers.ListNotificationConfigsPager( method=rpc, request=request, response=response, @@ -2674,18 +3624,25 @@ def sample_list_findings(): # Done; return the response. return response - def list_mute_configs( + def list_effective_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListMuteConfigsRequest, dict] + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsPager: - r"""Lists mute configs. + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. .. code-block:: python @@ -2698,32 +3655,34 @@ def list_mute_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_mute_configs(): + def sample_list_effective_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_mute_configs(request=request) + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. + request (Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing effective + security health analytics custom + modules. parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2735,9 +3694,10 @@ def sample_list_mute_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: - Response message for listing mute - configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + effective security health analytics + custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2754,11 +3714,16 @@ def sample_list_mute_configs(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListMuteConfigsRequest. + # in a securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): - request = securitycenter_service.ListMuteConfigsRequest(request) + if not isinstance( + request, + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ): + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if parent is not None: @@ -2766,7 +3731,9 @@ def sample_list_mute_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] + rpc = self._transport._wrapped_methods[ + self._transport.list_effective_security_health_analytics_custom_modules + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2784,7 +3751,7 @@ def sample_list_mute_configs(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListMuteConfigsPager( + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager( method=rpc, request=request, response=response, @@ -2794,18 +3761,25 @@ def sample_list_mute_configs(): # Done; return the response. return response - def list_notification_configs( + def list_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListNotificationConfigsRequest, dict] + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. .. code-block:: python @@ -2818,31 +3792,33 @@ def list_notification_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_notification_configs(): + def sample_list_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_notification_configs(request=request) + page_result = client.list_security_health_analytics_custom_modules(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. + request (Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing security + health analytics custom modules. parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2854,9 +3830,9 @@ def sample_list_notification_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager: + Response message for listing security + health analytics custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2873,13 +3849,18 @@ def sample_list_notification_configs(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. + # in a securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, securitycenter_service.ListNotificationConfigsRequest + request, + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): - request = securitycenter_service.ListNotificationConfigsRequest(request) + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if parent is not None: @@ -2888,7 +3869,7 @@ def sample_list_notification_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = self._transport._wrapped_methods[ - self._transport.list_notification_configs + self._transport.list_security_health_analytics_custom_modules ] # Certain fields should be provided within the metadata header; @@ -2907,7 +3888,7 @@ def sample_list_notification_configs(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( + response = pagers.ListSecurityHealthAnalyticsCustomModulesPager( method=rpc, request=request, response=response, @@ -4293,6 +5274,156 @@ def sample_update_organization_settings(): # Done; return the response. return response + def update_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [security_health_analytics_custom_module, update_mask] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.update_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ( + "security_health_analytics_custom_module.name", + request.security_health_analytics_custom_module.name, + ), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def update_source( self, request: Optional[ diff --git a/google/cloud/securitycenter_v1/services/security_center/pagers.py b/google/cloud/securitycenter_v1/services/security_center/pagers.py index cae5c834..b06f11ac 100644 --- a/google/cloud/securitycenter_v1/services/security_center/pagers.py +++ b/google/cloud/securitycenter_v1/services/security_center/pagers.py @@ -26,8 +26,10 @@ from google.cloud.securitycenter_v1.types import ( bigquery_export, + effective_security_health_analytics_custom_module, mute_config, notification_config, + security_health_analytics_custom_module, securitycenter_service, source, ) @@ -423,6 +425,162 @@ def __repr__(self) -> str: return "{0}<{1!r}>".format(self.__class__.__name__, self._response) +class ListDescendantSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + class ListFindingsPager: """A pager for iterating through ``list_findings`` requests. @@ -819,6 +977,321 @@ def __repr__(self) -> str: return "{0}<{1!r}>".format(self.__class__.__name__, self._response) +class ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.effective_security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.effective_security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + class ListSourcesPager: """A pager for iterating through ``list_sources`` requests. diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/base.py b/google/cloud/securitycenter_v1/services/security_center/transports/base.py index d38838e3..33860dca 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/base.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/base.py @@ -29,6 +29,10 @@ from google.protobuf import empty_pb2 # type: ignore from google.cloud.securitycenter_v1 import gapic_version as package_version +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -36,8 +40,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -148,6 +155,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.create_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.create_source: gapic_v1.method.wrap_method( self.create_source, default_timeout=60.0, @@ -178,6 +190,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.delete_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.get_big_query_export: gapic_v1.method.wrap_method( self.get_big_query_export, default_timeout=None, @@ -233,6 +250,36 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.get_effective_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_effective_security_health_analytics_custom_module, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_security_health_analytics_custom_module, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.get_source: gapic_v1.method.wrap_method( self.get_source, default_retry=retries.Retry( @@ -293,6 +340,21 @@ def _prep_wrapped_messages(self, client_info): default_timeout=480.0, client_info=client_info, ), + self.list_descendant_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.list_findings: gapic_v1.method.wrap_method( self.list_findings, default_retry=retries.Retry( @@ -328,6 +390,36 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.list_effective_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.list_sources: gapic_v1.method.wrap_method( self.list_sources, default_retry=retries.Retry( @@ -403,6 +495,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.update_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.update_source: gapic_v1.method.wrap_method( self.update_source, default_timeout=60.0, @@ -458,6 +555,20 @@ def bulk_mute_findings( ]: raise NotImplementedError() + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def create_source( self, @@ -515,6 +626,15 @@ def delete_notification_config( ]: raise NotImplementedError() + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]], + ]: + raise NotImplementedError() + @property def get_big_query_export( self, @@ -568,6 +688,34 @@ def get_organization_settings( ]: raise NotImplementedError() + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Union[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + Awaitable[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Union[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def get_source( self, @@ -613,6 +761,22 @@ def list_assets( ]: raise NotImplementedError() + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + @property def list_findings( self, @@ -649,6 +813,36 @@ def list_notification_configs( ]: raise NotImplementedError() + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + @property def list_sources( self, @@ -763,6 +957,20 @@ def update_organization_settings( ]: raise NotImplementedError() + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py b/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py index 45cd7a02..dd20ebcf 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py @@ -26,6 +26,10 @@ from google.protobuf import empty_pb2 # type: ignore import grpc # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -33,8 +37,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -295,6 +302,43 @@ def bulk_mute_findings( ) return self._stubs["bulk_mute_findings"] + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "create_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["create_security_health_analytics_custom_module"] + @property def create_source( self, @@ -459,6 +503,41 @@ def delete_notification_config( ) return self._stubs["delete_notification_config"] + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty, + ]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "delete_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["delete_security_health_analytics_custom_module"] + @property def get_big_query_export( self, @@ -601,6 +680,71 @@ def get_organization_settings( ) return self._stubs["get_organization_settings"] + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + ~.EffectiveSecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_effective_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_effective_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_effective_security_health_analytics_custom_module"] + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_security_health_analytics_custom_module"] + @property def get_source( self, @@ -721,6 +865,45 @@ def list_assets( ) return self._stubs["list_assets"] + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + ~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if ( + "list_descendant_security_health_analytics_custom_modules" + not in self._stubs + ): + self._stubs[ + "list_descendant_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_descendant_security_health_analytics_custom_modules"] + @property def list_findings( self, @@ -811,6 +994,80 @@ def list_notification_configs( ) return self._stubs["list_notification_configs"] + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + ~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_effective_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_effective_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_effective_security_health_analytics_custom_modules"] + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + ~.ListSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_security_health_analytics_custom_modules"] + @property def list_sources( self, @@ -1125,6 +1382,44 @@ def update_organization_settings( ) return self._stubs["update_organization_settings"] + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "update_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["update_security_health_analytics_custom_module"] + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py b/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py index 720a77df..410c1c98 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py @@ -26,6 +26,10 @@ import grpc # type: ignore from grpc.experimental import aio # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -33,8 +37,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -301,6 +308,45 @@ def bulk_mute_findings( ) return self._stubs["bulk_mute_findings"] + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "create_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["create_security_health_analytics_custom_module"] + @property def create_source( self, @@ -473,6 +519,41 @@ def delete_notification_config( ) return self._stubs["delete_notification_config"] + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[empty_pb2.Empty], + ]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "delete_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["delete_security_health_analytics_custom_module"] + @property def get_big_query_export( self, @@ -615,6 +696,75 @@ def get_organization_settings( ) return self._stubs["get_organization_settings"] + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.EffectiveSecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_effective_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_effective_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_effective_security_health_analytics_custom_module"] + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_security_health_analytics_custom_module"] + @property def get_source( self, @@ -735,6 +885,47 @@ def list_assets( ) return self._stubs["list_assets"] + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if ( + "list_descendant_security_health_analytics_custom_modules" + not in self._stubs + ): + self._stubs[ + "list_descendant_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_descendant_security_health_analytics_custom_modules"] + @property def list_findings( self, @@ -825,6 +1016,84 @@ def list_notification_configs( ) return self._stubs["list_notification_configs"] + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_effective_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_effective_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_effective_security_health_analytics_custom_modules"] + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_security_health_analytics_custom_modules"] + @property def list_sources( self, @@ -1145,6 +1414,46 @@ def update_organization_settings( ) return self._stubs["update_organization_settings"] + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "update_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["update_security_health_analytics_custom_module"] + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/rest.py b/google/cloud/securitycenter_v1/services/security_center/transports/rest.py index cb199735..5a1ed8f0 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/rest.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/rest.py @@ -48,6 +48,10 @@ from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -55,8 +59,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -132,6 +139,14 @@ def post_create_notification_config(self, response): logging.log(f"Received response: {response}") return response + def pre_create_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_create_source(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -152,6 +167,10 @@ def pre_delete_notification_config(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata + def pre_delete_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + def pre_get_big_query_export(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -160,6 +179,14 @@ def post_get_big_query_export(self, response): logging.log(f"Received response: {response}") return response + def pre_get_effective_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_effective_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_iam_policy(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -192,6 +219,14 @@ def post_get_organization_settings(self, response): logging.log(f"Received response: {response}") return response + def pre_get_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_source(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -232,6 +267,22 @@ def post_list_big_query_exports(self, response): logging.log(f"Received response: {response}") return response + def pre_list_descendant_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_effective_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + def pre_list_findings(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -256,6 +307,14 @@ def post_list_notification_configs(self, response): logging.log(f"Received response: {response}") return response + def pre_list_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + def pre_list_sources(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -352,6 +411,14 @@ def post_update_organization_settings(self, response): logging.log(f"Received response: {response}") return response + def pre_update_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_update_security_marks(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -496,6 +563,33 @@ def post_create_notification_config( """ return response + def pre_create_security_health_analytics_custom_module( + self, + request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_security_health_analytics_custom_module( + self, + response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_source( self, request: securitycenter_service.CreateSourceRequest, @@ -560,6 +654,21 @@ def pre_delete_notification_config( """ return request, metadata + def pre_delete_security_health_analytics_custom_module( + self, + request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for delete_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + def pre_get_big_query_export( self, request: securitycenter_service.GetBigQueryExportRequest, @@ -585,6 +694,33 @@ def post_get_big_query_export( """ return response + def pre_get_effective_security_health_analytics_custom_module( + self, + request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_effective_security_health_analytics_custom_module( + self, + response: effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_iam_policy( self, request: iam_policy_pb2.GetIamPolicyRequest, @@ -679,6 +815,33 @@ def post_get_organization_settings( """ return response + def pre_get_security_health_analytics_custom_module( + self, + request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_security_health_analytics_custom_module( + self, + response: security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_source( self, request: securitycenter_service.GetSourceRequest, @@ -794,6 +957,60 @@ def post_list_big_query_exports( """ return response + def pre_list_descendant_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + def pre_list_effective_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_findings( self, request: securitycenter_service.ListFindingsRequest, @@ -867,6 +1084,33 @@ def post_list_notification_configs( """ return response + def pre_list_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_sources( self, request: securitycenter_service.ListSourcesRequest, @@ -1151,6 +1395,33 @@ def post_update_organization_settings( """ return response + def pre_update_security_health_analytics_custom_module( + self, + request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_health_analytics_custom_module( + self, + response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_marks( self, request: securitycenter_service.UpdateSecurityMarksRequest, @@ -2001,9 +2272,9 @@ def __call__( resp = self._interceptor.post_create_notification_config(resp) return resp - class _CreateSource(SecurityCenterRestStub): + class _CreateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): def __hash__(self): - return hash("CreateSource") + return hash("CreateSecurityHealthAnalyticsCustomModule") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2017,44 +2288,66 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.CreateSourceRequest, + request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the create security health + analytics custom module method over HTTP. - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + Args: + request (~.securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for creating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ http_options: List[Dict[str, str]] = [ { "method": "post", - "uri": "/v1/{parent=organizations/*}/sources", - "body": "source", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", + }, + { + "method": "post", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", + }, + { + "method": "post", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", }, ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) + ( + request, + metadata, + ) = self._interceptor.pre_create_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) # Jsonify the request body @@ -2096,16 +2389,24 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) + resp = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) + resp = ( + self._interceptor.post_create_security_health_analytics_custom_module( + resp + ) + ) return resp - class _DeleteBigQueryExport(SecurityCenterRestStub): + class _CreateSource(SecurityCenterRestStub): def __hash__(self): - return hash("DeleteBigQueryExport") + return hash("CreateSource") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2119,18 +2420,120 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.DeleteBigQueryExportRequest, + request: securitycenter_service.CreateSourceRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ): - r"""Call the delete big query export method over HTTP. + ) -> gcs_source.Source: + r"""Call the create source method over HTTP. Args: - request (~.securitycenter_service.DeleteBigQueryExportRequest): - The request object. Request message for deleting a - BigQuery export. + request (~.securitycenter_service.CreateSourceRequest): + The request object. Request message for creating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=organizations/*}/sources", + "body": "source", + }, + ] + request, metadata = self._interceptor.pre_create_source(request, metadata) + pb_request = securitycenter_service.CreateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_source(resp) + return resp + + class _DeleteBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.DeleteBigQueryExportRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ): + r"""Call the delete big query export method over HTTP. + + Args: + request (~.securitycenter_service.DeleteBigQueryExportRequest): + The request object. Request message for deleting a + BigQuery export. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2361,6 +2764,97 @@ def __call__( if response.status_code >= 400: raise core_exceptions.from_http_response(response) + class _DeleteSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ): + r"""Call the delete security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for deleting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "delete", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "delete", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_delete_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + class _GetBigQueryExport(SecurityCenterRestStub): def __hash__(self): return hash("GetBigQueryExport") @@ -2460,6 +2954,130 @@ def __call__( resp = self._interceptor.post_get_big_query_export(resp) return resp + class _GetEffectiveSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("GetEffectiveSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Call the get effective security + health analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the + representation of a Security Health Analytics custom + module at a specified level of the resource hierarchy: + organization, folder, or project. If a custom module is + inherited from a parent organization or folder, the + value of the ``enablementState`` property in + EffectiveSecurityHealthAnalyticsCustomModule is set to + the value that is effective in the parent, instead of + ``INHERITED``. For example, if the module is enabled in + a parent organization or folder, the effective + enablement_state for the module in all child folders or + projects is also ``enabled``. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_get_effective_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + pb_resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_effective_security_health_analytics_custom_module( + resp + ) + return resp + class _GetIamPolicy(SecurityCenterRestStub): def __hash__(self): return hash("GetIamPolicy") @@ -2753,9 +3371,112 @@ def __call__( r"""Call the get notification config method over HTTP. Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. + request (~.securitycenter_service.GetNotificationConfigRequest): + The request object. Request message for getting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.notification_config.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=organizations/*/notificationConfigs/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/notificationConfigs/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/notificationConfigs/*}", + }, + ] + request, metadata = self._interceptor.pre_get_notification_config( + request, metadata + ) + pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = notification_config.NotificationConfig() + pb_resp = notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_notification_config(resp) + return resp + + class _GetOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("GetOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.GetOrganizationSettingsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Call the get organization settings method over HTTP. + + Args: + request (~.securitycenter_service.GetOrganizationSettingsRequest): + The request object. Request message for getting + organization settings. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2763,34 +3484,25 @@ def __call__( sent along with the request as metadata. Returns: - ~.notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. + ~.organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{name=organizations/*/notificationConfigs/*}", - }, - { - "method": "get", - "uri": "/v1/{name=folders/*/notificationConfigs/*}", - }, - { - "method": "get", - "uri": "/v1/{name=projects/*/notificationConfigs/*}", + "uri": "/v1/{name=organizations/*/organizationSettings}", }, ] - request, metadata = self._interceptor.pre_get_notification_config( + request, metadata = self._interceptor.pre_get_organization_settings( request, metadata ) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) uri = transcoded_request["uri"] @@ -2824,16 +3536,16 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) + resp = organization_settings.OrganizationSettings() + pb_resp = organization_settings.OrganizationSettings.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) + resp = self._interceptor.post_get_organization_settings(resp) return resp - class _GetOrganizationSettings(SecurityCenterRestStub): + class _GetSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): def __hash__(self): - return hash("GetOrganizationSettings") + return hash("GetSecurityHealthAnalyticsCustomModule") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2847,43 +3559,64 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.GetOrganizationSettingsRequest, + request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the get security health + analytics custom module method over HTTP. - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + Args: + request (~.securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. + Returns: + ~.security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{name=organizations/*/organizationSettings}", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}", }, ] - request, metadata = self._interceptor.pre_get_organization_settings( + ( + request, + metadata, + ) = self._interceptor.pre_get_security_health_analytics_custom_module( request, metadata ) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb( - request + pb_request = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) ) transcoded_request = path_template.transcode(http_options, pb_request) @@ -2918,11 +3651,17 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) + resp = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) + resp = self._interceptor.post_get_security_health_analytics_custom_module( + resp + ) return resp class _GetSource(SecurityCenterRestStub): @@ -3362,31 +4101,251 @@ def __call__( metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. - Returns: - ~.securitycenter_service.ListBigQueryExportsResponse: - Response message for listing BigQuery - exports. + Returns: + ~.securitycenter_service.ListBigQueryExportsResponse: + Response message for listing BigQuery + exports. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*}/bigQueryExports", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*}/bigQueryExports", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*}/bigQueryExports", + }, + ] + request, metadata = self._interceptor.pre_list_big_query_exports( + request, metadata + ) + pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListBigQueryExportsResponse() + pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_big_query_exports(resp) + return resp + + class _ListDescendantSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListDescendantSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list descendant security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing + descendant security health analytics + custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + descendant security health analytics + custom modules. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_list_descendant_security_health_analytics_custom_modules( + request, metadata + ) + pb_request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_descendant_security_health_analytics_custom_modules( + resp + ) + return resp + + class _ListEffectiveSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListEffectiveSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list effective security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + effective security health analytics + custom modules. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{parent=organizations/*}/bigQueryExports", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, { "method": "get", - "uri": "/v1/{parent=folders/*}/bigQueryExports", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, { "method": "get", - "uri": "/v1/{parent=projects/*}/bigQueryExports", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, ] - request, metadata = self._interceptor.pre_list_big_query_exports( + ( + request, + metadata, + ) = self._interceptor.pre_list_effective_security_health_analytics_custom_modules( request, metadata ) - pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) + pb_request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) uri = transcoded_request["uri"] @@ -3420,11 +4379,17 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = securitycenter_service.ListBigQueryExportsResponse() - pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) + resp = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_big_query_exports(resp) + resp = self._interceptor.post_list_effective_security_health_analytics_custom_modules( + resp + ) return resp class _ListFindings(SecurityCenterRestStub): @@ -3724,6 +4689,117 @@ def __call__( resp = self._interceptor.post_list_notification_configs(resp) return resp + class _ListSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list security health + analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing security + health analytics custom modules. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_list_security_health_analytics_custom_modules( + request, metadata + ) + pb_request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_security_health_analytics_custom_modules( + resp + ) + return resp + class _ListSources(SecurityCenterRestStub): def __hash__(self): return hash("ListSources") @@ -5083,6 +6159,138 @@ def __call__( resp = self._interceptor.post_update_organization_settings(resp) return resp + class _UpdateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the update security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for updating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=projects/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_update_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = ( + self._interceptor.post_update_security_health_analytics_custom_module( + resp + ) + ) + return resp + class _UpdateSecurityMarks(SecurityCenterRestStub): def __hash__(self): return hash("UpdateSecurityMarks") @@ -5366,6 +6574,17 @@ def create_notification_config( # In C++ this would require a dynamic_cast return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def create_source( self, @@ -5402,6 +6621,17 @@ def delete_notification_config( # In C++ this would require a dynamic_cast return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_big_query_export( self, @@ -5413,6 +6643,17 @@ def get_big_query_export( # In C++ this would require a dynamic_cast return self._GetBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetEffectiveSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_iam_policy( self, @@ -5453,6 +6694,17 @@ def get_organization_settings( # In C++ this would require a dynamic_cast return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_source( self, @@ -5505,6 +6757,32 @@ def list_big_query_exports( # In C++ this would require a dynamic_cast return self._ListBigQueryExports(self._session, self._host, self._interceptor) # type: ignore + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListDescendantSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListEffectiveSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + @property def list_findings( self, @@ -5538,6 +6816,17 @@ def list_notification_configs( # In C++ this would require a dynamic_cast return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + @property def list_sources( self, @@ -5656,6 +6945,17 @@ def update_organization_settings( # In C++ this would require a dynamic_cast return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def update_security_marks( self, diff --git a/google/cloud/securitycenter_v1/types/__init__.py b/google/cloud/securitycenter_v1/types/__init__.py index 5d902c0f..f73d61ae 100644 --- a/google/cloud/securitycenter_v1/types/__init__.py +++ b/google/cloud/securitycenter_v1/types/__init__.py @@ -21,6 +21,9 @@ from .contact_details import Contact, ContactDetails from .container import Container from .database import Database +from .effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from .exfiltration import ExfilResource, Exfiltration from .external_system import ExternalSystem from .file import File @@ -39,6 +42,8 @@ from .process import EnvironmentVariable, Process from .resource import Resource from .run_asset_discovery_response import RunAssetDiscoveryResponse +from .security_health_analytics_custom_config import CustomConfig +from .security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule from .security_marks import SecurityMarks from .securitycenter_service import ( BulkMuteFindingsRequest, @@ -47,14 +52,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -65,12 +74,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -82,6 +97,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -100,6 +116,7 @@ "ContactDetails", "Container", "Database", + "EffectiveSecurityHealthAnalyticsCustomModule", "ExfilResource", "Exfiltration", "ExternalSystem", @@ -120,6 +137,8 @@ "Process", "Resource", "RunAssetDiscoveryResponse", + "CustomConfig", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "BulkMuteFindingsRequest", "BulkMuteFindingsResponse", @@ -127,14 +146,18 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -145,12 +168,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "RunAssetDiscoveryRequest", @@ -162,6 +191,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Source", diff --git a/google/cloud/securitycenter_v1/types/bigquery_export.py b/google/cloud/securitycenter_v1/types/bigquery_export.py index 563309bc..044f7b7e 100644 --- a/google/cloud/securitycenter_v1/types/bigquery_export.py +++ b/google/cloud/securitycenter_v1/types/bigquery_export.py @@ -74,24 +74,24 @@ class BigQueryExport(proto.Message): BigQuery Dataset unique ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the big query + Output only. The time at which the BigQuery export was created. This field is set by the server and will be ignored if provided on export on creation. update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The most recent time at which - the big export was updated. This field is set by - the server and will be ignored if provided on - export creation or update. + the BigQuery export was updated. This field is + set by the server and will be ignored if + provided on export creation or update. most_recent_editor (str): Output only. Email address of the user who - last edited the big query export. This field is + last edited the BigQuery export. This field is set by the server and will be ignored if provided on export creation or update. principal (str): Output only. The service account that needs - permission to create table, upload data to the - big query dataset. + permission to create table and upload data to + the BigQuery dataset. """ name: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/contact_details.py b/google/cloud/securitycenter_v1/types/contact_details.py index a7cee6e2..b0f600da 100644 --- a/google/cloud/securitycenter_v1/types/contact_details.py +++ b/google/cloud/securitycenter_v1/types/contact_details.py @@ -44,11 +44,11 @@ class ContactDetails(proto.Message): class Contact(proto.Message): - r"""Representa a single contact's email address + r"""The email address of a contact. Attributes: email (str): - An email address e.g. "person123@company.com". + An email address. For example, "``person123@company.com``". """ email: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/database.py b/google/cloud/securitycenter_v1/types/database.py index bad0e30d..78efc65c 100644 --- a/google/cloud/securitycenter_v1/types/database.py +++ b/google/cloud/securitycenter_v1/types/database.py @@ -34,7 +34,7 @@ class Database(proto.Message): database instance itself. Some database resources may not have the full resource name populated because these resource types are not yet supported by Cloud Asset Inventory (e.g. CloudSQL - databases). In these cases only the display name will be + databases). In these cases only the display name will be provided. Attributes: diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py b/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py similarity index 97% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py rename to google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py index f7120d2c..d82d75b4 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py +++ b/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py @@ -21,11 +21,10 @@ from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config - __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'EffectiveSecurityHealthAnalyticsCustomModule', + "EffectiveSecurityHealthAnalyticsCustomModule", }, ) @@ -66,6 +65,7 @@ class EffectiveSecurityHealthAnalyticsCustomModule(proto.Message): contain alphanumeric characters or underscores only. """ + class EnablementState(proto.Enum): r"""The enablement state of the module. diff --git a/google/cloud/securitycenter_v1/types/exfiltration.py b/google/cloud/securitycenter_v1/types/exfiltration.py index d00225d7..8f035aee 100644 --- a/google/cloud/securitycenter_v1/types/exfiltration.py +++ b/google/cloud/securitycenter_v1/types/exfiltration.py @@ -30,7 +30,7 @@ class Exfiltration(proto.Message): r"""Exfiltration represents a data exfiltration attempt of one or - more sources to one or more targets. Sources represent the + more sources to one or more targets. Sources represent the source of data that is exfiltrated, and Targets represents the destination the data was copied to. diff --git a/google/cloud/securitycenter_v1/types/finding.py b/google/cloud/securitycenter_v1/types/finding.py index 0868d24d..4fa96375 100644 --- a/google/cloud/securitycenter_v1/types/finding.py +++ b/google/cloud/securitycenter_v1/types/finding.py @@ -137,7 +137,7 @@ class Finding(proto.Message): https://en.wikipedia.org/wiki/Indicator_of_compromise vulnerability (google.cloud.securitycenter_v1.types.Vulnerability): Represents vulnerability-specific fields like - CVE and CVS scores. CVE stands for Common + CVE and CVSS scores. CVE stands for Common Vulnerabilities and Exposures (https://cve.mitre.org/about/) mute_update_time (google.protobuf.timestamp_pb2.Timestamp): @@ -204,6 +204,10 @@ class Finding(proto.Message): Finding. next_steps (str): Next steps associate to the finding. + module_name (str): + Unique identifier of the module which + generated the finding. Example: + folders/598186756061/securityHealthAnalyticsSettings/customModules/56799441161885 containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): Containers associated with the finding. containers provides information for both @@ -506,6 +510,10 @@ class FindingClass(proto.Enum): proto.STRING, number=40, ) + module_name: str = proto.Field( + proto.STRING, + number=41, + ) containers: MutableSequence[container.Container] = proto.RepeatedField( proto.MESSAGE, number=42, diff --git a/google/cloud/securitycenter_v1/types/indicator.py b/google/cloud/securitycenter_v1/types/indicator.py index 6048ab24..00995e4a 100644 --- a/google/cloud/securitycenter_v1/types/indicator.py +++ b/google/cloud/securitycenter_v1/types/indicator.py @@ -28,16 +28,17 @@ class Indicator(proto.Message): - r"""Represents what's commonly known as an Indicator of compromise (IoC) - in computer forensics. This is an artifact observed on a network or - in an operating system that, with high confidence, indicates a - computer intrusion. Reference: - https://en.wikipedia.org/wiki/Indicator_of_compromise + r"""Represents what's commonly known as an *indicator of compromise* + (IoC) in computer forensics. This is an artifact observed on a + network or in an operating system that, with high confidence, + indicates a computer intrusion. For more information, see `Indicator + of + compromise `__. Attributes: ip_addresses (MutableSequence[str]): - List of ip addresses associated to the - Finding. + The list of IP addresses that are associated + with the finding. domains (MutableSequence[str]): List of domains associated to the Finding. signatures (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature]): diff --git a/google/cloud/securitycenter_v1/types/kernel_rootkit.py b/google/cloud/securitycenter_v1/types/kernel_rootkit.py index 62980f75..42c02948 100644 --- a/google/cloud/securitycenter_v1/types/kernel_rootkit.py +++ b/google/cloud/securitycenter_v1/types/kernel_rootkit.py @@ -34,35 +34,36 @@ class KernelRootkit(proto.Message): name (str): Rootkit name when available. unexpected_code_modification (bool): - True if unexpected modifications of kernel + True when unexpected modifications of kernel code memory are present. unexpected_read_only_data_modification (bool): - True if unexpected modifications of kernel + True when unexpected modifications of kernel read-only data memory are present. unexpected_ftrace_handler (bool): - True if ``ftrace`` points are present with callbacks + True when ``ftrace`` points are present with callbacks pointing to regions that are not in the expected kernel or module code range. unexpected_kprobe_handler (bool): - True if ``kprobe`` points are present with callbacks + True when ``kprobe`` points are present with callbacks pointing to regions that are not in the expected kernel or module code range. unexpected_kernel_code_pages (bool): - True if kernel code pages that are not in the - expected kernel or module code regions are + True when kernel code pages that are not in + the expected kernel or module code regions are present. unexpected_system_call_handler (bool): - True if system call handlers that are are not - in the expected kernel or module code regions - are present. + True when system call handlers that are are + not in the expected kernel or module code + regions are present. unexpected_interrupt_handler (bool): - True if interrupt handlers that are are not + True when interrupt handlers that are are not in the expected kernel or module code regions are present. unexpected_processes_in_runqueue (bool): - True if unexpected processes in the scheduler - run queue are present. Such processes are in the - run queue, but not in the process task list. + True when unexpected processes in the + scheduler run queue are present. Such processes + are in the run queue, but not in the process + task list. """ name: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/kubernetes.py b/google/cloud/securitycenter_v1/types/kubernetes.py index e0406a6b..ac0b4bec 100644 --- a/google/cloud/securitycenter_v1/types/kubernetes.py +++ b/google/cloud/securitycenter_v1/types/kubernetes.py @@ -30,7 +30,7 @@ class Kubernetes(proto.Message): - r"""Kubernetes related attributes. + r"""Kubernetes-related attributes. Attributes: pods (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Pod]): @@ -178,8 +178,9 @@ class Binding(proto.Message): The Role or ClusterRole referenced by the binding. subjects (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Subject]): - Represents the subjects(s) bound to the role. - Not always available for PATCH requests. + Represents one or more subjects that are + bound to the role. Not always available for + PATCH requests. """ ns: str = proto.Field( diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py similarity index 95% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py rename to google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py index 4f885a80..8cbe610c 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py +++ b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py @@ -17,15 +17,13 @@ from typing import MutableMapping, MutableSequence -import proto # type: ignore - from google.type import expr_pb2 # type: ignore - +import proto # type: ignore __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'CustomConfig', + "CustomConfig", }, ) @@ -63,6 +61,7 @@ class CustomConfig(proto.Message): returned with each finding generated by this module in the ``nextSteps`` property of the finding JSON. """ + class Severity(proto.Enum): r"""Defines the valid value options for the severity of a finding. @@ -121,10 +120,12 @@ class Property(proto.Message): message=expr_pb2.Expr, ) - properties: MutableSequence['CustomConfig.CustomOutputSpec.Property'] = proto.RepeatedField( + properties: MutableSequence[ + "CustomConfig.CustomOutputSpec.Property" + ] = proto.RepeatedField( proto.MESSAGE, number=1, - message='CustomConfig.CustomOutputSpec.Property', + message="CustomConfig.CustomOutputSpec.Property", ) class ResourceSelector(proto.Message): diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py similarity index 98% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py rename to google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py index 57bb086f..1a40c286 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py +++ b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py @@ -17,16 +17,15 @@ from typing import MutableMapping, MutableSequence +from google.protobuf import timestamp_pb2 # type: ignore import proto # type: ignore from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.protobuf import timestamp_pb2 # type: ignore - __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'SecurityHealthAnalyticsCustomModule', + "SecurityHealthAnalyticsCustomModule", }, ) @@ -78,6 +77,7 @@ class SecurityHealthAnalyticsCustomModule(proto.Message): The user specified custom configuration for the module. """ + class EnablementState(proto.Enum): r"""Possible enablement states of a custom module. diff --git a/google/cloud/securitycenter_v1/types/securitycenter_service.py b/google/cloud/securitycenter_v1/types/securitycenter_service.py index 04856162..7fc55cff 100644 --- a/google/cloud/securitycenter_v1/types/securitycenter_service.py +++ b/google/cloud/securitycenter_v1/types/securitycenter_service.py @@ -23,6 +23,10 @@ from google.protobuf import timestamp_pb2 # type: ignore import proto # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -30,9 +34,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import asset as gcs_asset -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import folder from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config @@ -46,23 +52,33 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", "GroupFindingsRequest", "GroupFindingsResponse", "GroupResult", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "ListAssetsRequest", @@ -77,6 +93,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSourceRequest", "UpdateSecurityMarksRequest", "CreateBigQueryExportRequest", @@ -254,6 +271,36 @@ class CreateNotificationConfigRequest(proto.Message): ) +class CreateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for creating security health analytics custom + modules. + + Attributes: + parent (str): + Required. Resource name of the new custom + module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics custom + module to create. The provided name is ignored + and reset with provided parent information and + server-generated ID. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + + class CreateSourceRequest(proto.Message): r"""Request message for creating a source. @@ -313,6 +360,26 @@ class DeleteNotificationConfigRequest(proto.Message): ) +class DeleteSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for deleting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to + delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class GetBigQueryExportRequest(proto.Message): r"""Request message for retrieving a BigQuery export. @@ -382,6 +449,46 @@ class GetOrganizationSettingsRequest(proto.Message): ) +class GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting effective security health + analytics custom modules. + + Attributes: + name (str): + Required. Name of the effective custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to get. + Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class GetSourceRequest(proto.Message): r"""Request message for getting a source. @@ -895,6 +1002,71 @@ class GroupResult(proto.Message): ) +class ListDescendantSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing descendant security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list descendant + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing descendant security health + analytics custom modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent and its descendants. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + class ListMuteConfigsRequest(proto.Message): r"""Request message for listing mute configs at a given scope e.g. organization, folder or project. @@ -1023,6 +1195,136 @@ def raw_page(self): ) +class ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing effective security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list effective + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing effective security health + analytics custom modules. + + Attributes: + effective_security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule]): + Effective custom modules belonging to the + requested parent. + next_page_token (str): + If not empty, indicates that there may be + more effective custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + effective_security_health_analytics_custom_modules: MutableSequence[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing security health analytics custom + modules. + + Attributes: + parent (str): + Required. Name of parent to list custom + modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + class ListSourcesRequest(proto.Message): r"""Request message for listing sources. @@ -1942,6 +2244,30 @@ class UpdateOrganizationSettingsRequest(proto.Message): ) +class UpdateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for updating security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics custom + module to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + """ + + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + class UpdateSourceRequest(proto.Message): r"""Request message for updating a source. diff --git a/owl-bot-staging/v1/.coveragerc b/owl-bot-staging/v1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1/.flake8 b/owl-bot-staging/v1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1/MANIFEST.in b/owl-bot-staging/v1/MANIFEST.in deleted file mode 100644 index a18e3d0b..00000000 --- a/owl-bot-staging/v1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1 *.py diff --git a/owl-bot-staging/v1/README.rst b/owl-bot-staging/v1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1/docs/conf.py b/owl-bot-staging/v1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1/docs/index.rst b/owl-bot-staging/v1/docs/index.rst deleted file mode 100644 index 47fc2db7..00000000 --- a/owl-bot-staging/v1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1/services - securitycenter_v1/types diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst b/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst deleted file mode 100644 index bc6175c8..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/services.rst b/owl-bot-staging/v1/docs/securitycenter_v1/services.rst deleted file mode 100644 index 295acede..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1 API -=============================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/types.rst b/owl-bot-staging/v1/docs/securitycenter_v1/types.rst deleted file mode 100644 index f7497757..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1 API -============================================ - -.. automodule:: google.cloud.securitycenter_v1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index e268aa1f..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,215 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1.types.access import Access -from google.cloud.securitycenter_v1.types.access import Geolocation -from google.cloud.securitycenter_v1.types.access import ServiceAccountDelegationInfo -from google.cloud.securitycenter_v1.types.asset import Asset -from google.cloud.securitycenter_v1.types.bigquery_export import BigQueryExport -from google.cloud.securitycenter_v1.types.compliance import Compliance -from google.cloud.securitycenter_v1.types.connection import Connection -from google.cloud.securitycenter_v1.types.contact_details import Contact -from google.cloud.securitycenter_v1.types.contact_details import ContactDetails -from google.cloud.securitycenter_v1.types.container import Container -from google.cloud.securitycenter_v1.types.database import Database -from google.cloud.securitycenter_v1.types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule -from google.cloud.securitycenter_v1.types.exfiltration import ExfilResource -from google.cloud.securitycenter_v1.types.exfiltration import Exfiltration -from google.cloud.securitycenter_v1.types.external_system import ExternalSystem -from google.cloud.securitycenter_v1.types.file import File -from google.cloud.securitycenter_v1.types.finding import Finding -from google.cloud.securitycenter_v1.types.folder import Folder -from google.cloud.securitycenter_v1.types.iam_binding import IamBinding -from google.cloud.securitycenter_v1.types.indicator import Indicator -from google.cloud.securitycenter_v1.types.kernel_rootkit import KernelRootkit -from google.cloud.securitycenter_v1.types.kubernetes import Kubernetes -from google.cloud.securitycenter_v1.types.label import Label -from google.cloud.securitycenter_v1.types.mitre_attack import MitreAttack -from google.cloud.securitycenter_v1.types.mute_config import MuteConfig -from google.cloud.securitycenter_v1.types.notification_config import NotificationConfig -from google.cloud.securitycenter_v1.types.notification_message import NotificationMessage -from google.cloud.securitycenter_v1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1.types.process import EnvironmentVariable -from google.cloud.securitycenter_v1.types.process import Process -from google.cloud.securitycenter_v1.types.resource import Resource -from google.cloud.securitycenter_v1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1.types.security_health_analytics_custom_config import CustomConfig -from google.cloud.securitycenter_v1.types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule -from google.cloud.securitycenter_v1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import SetMuteRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateExternalSystemRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1.types.source import Source -from google.cloud.securitycenter_v1.types.vulnerability import Cve -from google.cloud.securitycenter_v1.types.vulnerability import Cvssv3 -from google.cloud.securitycenter_v1.types.vulnerability import Reference -from google.cloud.securitycenter_v1.types.vulnerability import Vulnerability - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Access', - 'Geolocation', - 'ServiceAccountDelegationInfo', - 'Asset', - 'BigQueryExport', - 'Compliance', - 'Connection', - 'Contact', - 'ContactDetails', - 'Container', - 'Database', - 'EffectiveSecurityHealthAnalyticsCustomModule', - 'ExfilResource', - 'Exfiltration', - 'ExternalSystem', - 'File', - 'Finding', - 'Folder', - 'IamBinding', - 'Indicator', - 'KernelRootkit', - 'Kubernetes', - 'Label', - 'MitreAttack', - 'MuteConfig', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'EnvironmentVariable', - 'Process', - 'Resource', - 'RunAssetDiscoveryResponse', - 'CustomConfig', - 'SecurityHealthAnalyticsCustomModule', - 'SecurityMarks', - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateBigQueryExportRequest', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteBigQueryExportRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'UpdateBigQueryExportRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', - 'Cve', - 'Cvssv3', - 'Reference', - 'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py deleted file mode 100644 index 2f444fb5..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.access import Access -from .types.access import Geolocation -from .types.access import ServiceAccountDelegationInfo -from .types.asset import Asset -from .types.bigquery_export import BigQueryExport -from .types.compliance import Compliance -from .types.connection import Connection -from .types.contact_details import Contact -from .types.contact_details import ContactDetails -from .types.container import Container -from .types.database import Database -from .types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule -from .types.exfiltration import ExfilResource -from .types.exfiltration import Exfiltration -from .types.external_system import ExternalSystem -from .types.file import File -from .types.finding import Finding -from .types.folder import Folder -from .types.iam_binding import IamBinding -from .types.indicator import Indicator -from .types.kernel_rootkit import KernelRootkit -from .types.kubernetes import Kubernetes -from .types.label import Label -from .types.mitre_attack import MitreAttack -from .types.mute_config import MuteConfig -from .types.notification_config import NotificationConfig -from .types.notification_message import NotificationMessage -from .types.organization_settings import OrganizationSettings -from .types.process import EnvironmentVariable -from .types.process import Process -from .types.resource import Resource -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_health_analytics_custom_config import CustomConfig -from .types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import BulkMuteFindingsRequest -from .types.securitycenter_service import BulkMuteFindingsResponse -from .types.securitycenter_service import CreateBigQueryExportRequest -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateMuteConfigRequest -from .types.securitycenter_service import CreateNotificationConfigRequest -from .types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import DeleteBigQueryExportRequest -from .types.securitycenter_service import DeleteMuteConfigRequest -from .types.securitycenter_service import DeleteNotificationConfigRequest -from .types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetBigQueryExportRequest -from .types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetMuteConfigRequest -from .types.securitycenter_service import GetNotificationConfigRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListBigQueryExportsRequest -from .types.securitycenter_service import ListBigQueryExportsResponse -from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListMuteConfigsRequest -from .types.securitycenter_service import ListMuteConfigsResponse -from .types.securitycenter_service import ListNotificationConfigsRequest -from .types.securitycenter_service import ListNotificationConfigsResponse -from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import SetMuteRequest -from .types.securitycenter_service import UpdateBigQueryExportRequest -from .types.securitycenter_service import UpdateExternalSystemRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateMuteConfigRequest -from .types.securitycenter_service import UpdateNotificationConfigRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source -from .types.vulnerability import Cve -from .types.vulnerability import Cvssv3 -from .types.vulnerability import Reference -from .types.vulnerability import Vulnerability - -__all__ = ( - 'SecurityCenterAsyncClient', -'Access', -'Asset', -'BigQueryExport', -'BulkMuteFindingsRequest', -'BulkMuteFindingsResponse', -'Compliance', -'Connection', -'Contact', -'ContactDetails', -'Container', -'CreateBigQueryExportRequest', -'CreateFindingRequest', -'CreateMuteConfigRequest', -'CreateNotificationConfigRequest', -'CreateSecurityHealthAnalyticsCustomModuleRequest', -'CreateSourceRequest', -'CustomConfig', -'Cve', -'Cvssv3', -'Database', -'DeleteBigQueryExportRequest', -'DeleteMuteConfigRequest', -'DeleteNotificationConfigRequest', -'DeleteSecurityHealthAnalyticsCustomModuleRequest', -'EffectiveSecurityHealthAnalyticsCustomModule', -'EnvironmentVariable', -'ExfilResource', -'Exfiltration', -'ExternalSystem', -'File', -'Finding', -'Folder', -'Geolocation', -'GetBigQueryExportRequest', -'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', -'GetMuteConfigRequest', -'GetNotificationConfigRequest', -'GetOrganizationSettingsRequest', -'GetSecurityHealthAnalyticsCustomModuleRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'IamBinding', -'Indicator', -'KernelRootkit', -'Kubernetes', -'Label', -'ListAssetsRequest', -'ListAssetsResponse', -'ListBigQueryExportsRequest', -'ListBigQueryExportsResponse', -'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', -'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', -'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', -'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListMuteConfigsRequest', -'ListMuteConfigsResponse', -'ListNotificationConfigsRequest', -'ListNotificationConfigsResponse', -'ListSecurityHealthAnalyticsCustomModulesRequest', -'ListSecurityHealthAnalyticsCustomModulesResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'MitreAttack', -'MuteConfig', -'NotificationConfig', -'NotificationMessage', -'OrganizationSettings', -'Process', -'Reference', -'Resource', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityHealthAnalyticsCustomModule', -'SecurityMarks', -'ServiceAccountDelegationInfo', -'SetFindingStateRequest', -'SetMuteRequest', -'Source', -'UpdateBigQueryExportRequest', -'UpdateExternalSystemRequest', -'UpdateFindingRequest', -'UpdateMuteConfigRequest', -'UpdateNotificationConfigRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityHealthAnalyticsCustomModuleRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json deleted file mode 100644 index 5c23812a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json +++ /dev/null @@ -1,688 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1", - "protoPackage": "google.cloud.securitycenter.v1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py deleted file mode 100644 index 4b546e85..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py +++ /dev/null @@ -1,5701 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1 APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - big_query_export_path = staticmethod(SecurityCenterClient.big_query_export_path) - parse_big_query_export_path = staticmethod(SecurityCenterClient.parse_big_query_export_path) - effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.effective_security_health_analytics_custom_module_path) - parse_effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path) - external_system_path = staticmethod(SecurityCenterClient.external_system_path) - parse_external_system_path = staticmethod(SecurityCenterClient.parse_external_system_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - mute_config_path = staticmethod(SecurityCenterClient.mute_config_path) - parse_mute_config_path = staticmethod(SecurityCenterClient.parse_mute_config_path) - notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) - parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.security_health_analytics_custom_module_path) - parse_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_security_health_analytics_custom_module_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - topic_path = staticmethod(SecurityCenterClient.topic_path) - parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def bulk_mute_findings(self, - request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]]): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - parent (:class:`str`): - Required. The parent, at which bulk action needs to be - applied. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` - The response to a BulkMute request. Contains the LRO - information. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.BulkMuteFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.bulk_mute_findings, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - securitycenter_service.BulkMuteFindingsResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def create_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - parent: Optional[str] = None, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for creating security - health analytics custom modules. - parent (:class:`str`): - Required. Resource name of the new - custom module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): - Required. SecurityHealthAnalytics - custom module to create. The provided - name is ignored and reset with provided - parent information and server-generated - ID. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, security_health_analytics_custom_module]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_mute_config(self, - request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - mute_config_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Creates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = await client.create_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]]): - The request object. Request message for creating a mute - config. - parent (:class:`str`): - Required. Resource name of the new mute configs's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): - Required. The mute config being - created. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``mute_config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, mute_config, mute_config_id]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if mute_config is not None: - request.mute_config = mute_config - if mute_config_id is not None: - request.mute_config_id = mute_config_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]]): - The request object. Request message for creating a - notification config. - parent (:class:`str`): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (:class:`str`): - Required. - Unique identifier provided by the client - within the parent scope. It must be - between 1 and 128 characters and contain - alphanumeric characters, underscores, or - hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_mute_config(self, - request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_mute_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]]): - The request object. Request message for deleting a mute - config. - name (:class:`str`): - Required. Name of the mute config to delete. Its format - is organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]]): - The request object. Request message for deleting a - notification config. - name (:class:`str`): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def delete_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - await client.delete_security_health_analytics_custom_module(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for deleting security - health analytics custom modules. - name (:class:`str`): - Required. Name of the custom module - to delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def get_big_query_export(self, - request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Gets a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = await client.get_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]]): - The request object. Request message for retrieving a - BigQuery export. - name (:class:`str`): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_mute_config(self, - request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> mute_config.MuteConfig: - r"""Gets a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]]): - The request object. Request message for retrieving a mute - config. - name (:class:`str`): - Required. Name of the mute config to retrieve. Its - format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]]): - The request object. Request message for getting a - notification config. - name (:class:`str`): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_effective_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_effective_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = await client.get_effective_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for getting effective - security health analytics custom - modules. - name (:class:`str`): - Required. Name of the effective - custom module to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the representation of - a Security Health Analytics custom module at a - specified level of the resource hierarchy: - organization, folder, or project. If a custom module - is inherited from a parent organization or folder, - the value of the enablementState property in - EffectiveSecurityHealthAnalyticsCustomModule is set - to the value that is effective in the parent, instead - of INHERITED. For example, if the module is enabled - in a parent organization or folder, the effective - enablement_state for the module in all child folders - or projects is also enabled. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_effective_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Retrieves a SecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = await client.get_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for getting security - health analytics custom modules. - name (:class:`str`): - Required. Name of the custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_descendant_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_descendant_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing - descendant security health analytics - custom modules. - parent (:class:`str`): - Required. Name of parent to list - descendant custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing - descendant security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_descendant_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_mute_configs(self, - request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsAsyncPager: - r"""Lists mute configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - parent (:class:`str`): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: - Response message for listing mute - configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListMuteConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_mute_configs, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListMuteConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. - parent (:class:`str`): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListNotificationConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_effective_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_effective_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_effective_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing effective - security health analytics custom - modules. - parent (:class:`str`): - Required. Name of parent to list - effective custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing - effective security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_effective_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing security - health analytics custom modules. - parent (:class:`str`): - Required. Name of parent to list - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing security - health analytics custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_mute(self, - request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, - *, - name: Optional[str] = None, - mute: Optional[finding.Finding.Mute] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the mute state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = await client.set_mute(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]]): - The request object. Request message for updating a - finding's mute status. - name (:class:`str`): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute (:class:`google.cloud.securitycenter_v1.types.Finding.Mute`): - Required. The desired state of the - Mute. - - This corresponds to the ``mute`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, mute]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetMuteRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if mute is not None: - request.mute = mute - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_mute, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_external_system(self, - request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, - *, - external_system: Optional[gcs_external_system.ExternalSystem] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_external_system.ExternalSystem: - r"""Updates external system. This is for a given finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = await client.update_external_system(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]]): - The request object. Request message for updating a - ExternalSystem resource. - external_system (:class:`google.cloud.securitycenter_v1.types.ExternalSystem`): - Required. The external system - resource to update. - - This corresponds to the ``external_system`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the external system resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([external_system, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateExternalSystemRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if external_system is not None: - request.external_system = external_system - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_external_system, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("external_system.name", request.external_system.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_mute_config(self, - request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, - *, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Updates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = await client.update_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]]): - The request object. Request message for updating a mute - config. - mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): - Required. The mute config being - updated. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([mute_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if mute_config is not None: - request.mute_config = mute_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("mute_config.name", request.mute_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]]): - The request object. Request message for updating a - notification config. - notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( - ) - - # Make the request - response = await client.update_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for updating security - health analytics custom modules. - security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): - Required. The SecurityHealthAnalytics - custom module to update. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to update. - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_health_analytics_custom_module, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_big_query_export(self, - request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, - *, - parent: Optional[str] = None, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - big_query_export_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Creates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = await client.create_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]]): - The request object. Request message for creating a - BigQuery export. - parent (:class:`str`): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): - Required. The BigQuery export being - created. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``big_query_export_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, big_query_export, big_query_export_id]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if big_query_export is not None: - request.big_query_export = big_query_export - if big_query_export_id is not None: - request.big_query_export_id = big_query_export_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_big_query_export(self, - request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - await client.delete_big_query_export(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]]): - The request object. Request message for deleting a - BigQuery export. - name (:class:`str`): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def update_big_query_export(self, - request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, - *, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Updates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = await client.update_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]]): - The request object. Request message for updating a - BigQuery export. - big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): - Required. The BigQuery export being - updated. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([big_query_export, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if big_query_export is not None: - request.big_query_export = big_query_export - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("big_query_export.name", request.big_query_export.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_big_query_exports(self, - request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListBigQueryExportsAsyncPager: - r"""Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]]): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - parent (:class:`str`): - Required. The parent, which owns the collection of - BigQuery exports. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager: - Response message for listing BigQuery - exports. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListBigQueryExportsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_big_query_exports, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListBigQueryExportsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_operations( - self, - request: Optional[operations_pb2.ListOperationsRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.ListOperationsResponse: - r"""Lists operations that match the specified filter in the request. - - Args: - request (:class:`~.operations_pb2.ListOperationsRequest`): - The request object. Request message for - `ListOperations` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.ListOperationsResponse: - Response message for ``ListOperations`` method. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.ListOperationsRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.list_operations, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = await rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - async def get_operation( - self, - request: Optional[operations_pb2.GetOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.Operation: - r"""Gets the latest state of a long-running operation. - - Args: - request (:class:`~.operations_pb2.GetOperationRequest`): - The request object. Request message for - `GetOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.Operation: - An ``Operation`` object. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.GetOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.get_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = await rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - async def delete_operation( - self, - request: Optional[operations_pb2.DeleteOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a long-running operation. - - This method indicates that the client is no longer interested - in the operation result. It does not cancel the operation. - If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.DeleteOperationRequest`): - The request object. Request message for - `DeleteOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.DeleteOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.delete_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - async def cancel_operation( - self, - request: Optional[operations_pb2.CancelOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Starts asynchronous cancellation on a long-running operation. - - The server makes a best effort to cancel the operation, but success - is not guaranteed. If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.CancelOperationRequest`): - The request object. Request message for - `CancelOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.CancelOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.cancel_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py deleted file mode 100644 index 68222d1a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py +++ /dev/null @@ -1,5894 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1 APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def big_query_export_path(organization: str,export: str,) -> str: - """Returns a fully-qualified big_query_export string.""" - return "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) - - @staticmethod - def parse_big_query_export_path(path: str) -> Dict[str,str]: - """Parses a big_query_export path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/bigQueryExports/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def effective_security_health_analytics_custom_module_path(organization: str,effective_custom_module: str,) -> str: - """Returns a fully-qualified effective_security_health_analytics_custom_module string.""" - return "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) - - @staticmethod - def parse_effective_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: - """Parses a effective_security_health_analytics_custom_module path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/effectiveCustomModules/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def external_system_path(organization: str,source: str,finding: str,externalsystem: str,) -> str: - """Returns a fully-qualified external_system string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) - - @staticmethod - def parse_external_system_path(path: str) -> Dict[str,str]: - """Parses a external_system path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)/externalSystems/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def mute_config_path(organization: str,mute_config: str,) -> str: - """Returns a fully-qualified mute_config string.""" - return "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) - - @staticmethod - def parse_mute_config_path(path: str) -> Dict[str,str]: - """Parses a mute_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/muteConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def notification_config_path(organization: str,notification_config: str,) -> str: - """Returns a fully-qualified notification_config string.""" - return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - - @staticmethod - def parse_notification_config_path(path: str) -> Dict[str,str]: - """Parses a notification_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_health_analytics_custom_module_path(organization: str,custom_module: str,) -> str: - """Returns a fully-qualified security_health_analytics_custom_module string.""" - return "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) - - @staticmethod - def parse_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: - """Parses a security_health_analytics_custom_module path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/customModules/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def topic_path(project: str,topic: str,) -> str: - """Returns a fully-qualified topic string.""" - return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - - @staticmethod - def parse_topic_path(path: str) -> Dict[str,str]: - """Parses a topic path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def bulk_mute_findings(self, - request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - parent (str): - Required. The parent, at which bulk action needs to be - applied. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` - The response to a BulkMute request. Contains the LRO - information. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.BulkMuteFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.BulkMuteFindingsRequest): - request = securitycenter_service.BulkMuteFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.bulk_mute_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - securitycenter_service.BulkMuteFindingsResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def create_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - parent: Optional[str] = None, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for creating security - health analytics custom modules. - parent (str): - Required. Resource name of the new - custom module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. SecurityHealthAnalytics - custom module to create. The provided - name is ignored and reset with provided - parent information and server-generated - ID. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, security_health_analytics_custom_module]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_mute_config(self, - request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - mute_config_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Creates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = client.create_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]): - The request object. Request message for creating a mute - config. - parent (str): - Required. Resource name of the new mute configs's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being - created. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``mute_config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, mute_config, mute_config_id]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateMuteConfigRequest): - request = securitycenter_service.CreateMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if mute_config is not None: - request.mute_config = mute_config - if mute_config_id is not None: - request.mute_config_id = mute_config_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]): - The request object. Request message for creating a - notification config. - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (str): - Required. - Unique identifier provided by the client - within the parent scope. It must be - between 1 and 128 characters and contain - alphanumeric characters, underscores, or - hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): - request = securitycenter_service.CreateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_mute_config(self, - request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_mute_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]): - The request object. Request message for deleting a mute - config. - name (str): - Required. Name of the mute config to delete. Its format - is organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteMuteConfigRequest): - request = securitycenter_service.DeleteMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]): - The request object. Request message for deleting a - notification config. - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): - request = securitycenter_service.DeleteNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def delete_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - client.delete_security_health_analytics_custom_module(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for deleting security - health analytics custom modules. - name (str): - Required. Name of the custom module - to delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def get_big_query_export(self, - request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Gets a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = client.get_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]): - The request object. Request message for retrieving a - BigQuery export. - name (str): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetBigQueryExportRequest): - request = securitycenter_service.GetBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_mute_config(self, - request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> mute_config.MuteConfig: - r"""Gets a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]): - The request object. Request message for retrieving a mute - config. - name (str): - Required. Name of the mute config to retrieve. Its - format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetMuteConfigRequest): - request = securitycenter_service.GetMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]): - The request object. Request message for getting a - notification config. - name (str): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): - request = securitycenter_service.GetNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_effective_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_effective_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = client.get_effective_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for getting effective - security health analytics custom - modules. - name (str): - Required. Name of the effective - custom module to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the representation of - a Security Health Analytics custom module at a - specified level of the resource hierarchy: - organization, folder, or project. If a custom module - is inherited from a parent organization or folder, - the value of the enablementState property in - EffectiveSecurityHealthAnalyticsCustomModule is set - to the value that is effective in the parent, instead - of INHERITED. For example, if the module is enabled - in a parent organization or folder, the effective - enablement_state for the module in all child folders - or projects is also enabled. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_effective_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Retrieves a SecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = client.get_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for getting security - health analytics custom modules. - name (str): - Required. Name of the custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_descendant_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_descendant_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing - descendant security health analytics - custom modules. - parent (str): - Required. Name of parent to list - descendant custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: - Response message for listing - descendant security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_descendant_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_mute_configs(self, - request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsPager: - r"""Lists mute configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: - Response message for listing mute - configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListMuteConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): - request = securitycenter_service.ListMuteConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListMuteConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. - parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): - request = securitycenter_service.ListNotificationConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_effective_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_effective_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_effective_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing effective - security health analytics custom - modules. - parent (str): - Required. Name of parent to list - effective custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - Response message for listing - effective security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_effective_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing security - health analytics custom modules. - parent (str): - Required. Name of parent to list - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager: - Response message for listing security - health analytics custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_mute(self, - request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, - *, - name: Optional[str] = None, - mute: Optional[finding.Finding.Mute] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the mute state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = client.set_mute(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]): - The request object. Request message for updating a - finding's mute status. - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Required. The desired state of the - Mute. - - This corresponds to the ``mute`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, mute]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetMuteRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetMuteRequest): - request = securitycenter_service.SetMuteRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if mute is not None: - request.mute = mute - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_mute] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_external_system(self, - request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, - *, - external_system: Optional[gcs_external_system.ExternalSystem] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_external_system.ExternalSystem: - r"""Updates external system. This is for a given finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = client.update_external_system(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]): - The request object. Request message for updating a - ExternalSystem resource. - external_system (google.cloud.securitycenter_v1.types.ExternalSystem): - Required. The external system - resource to update. - - This corresponds to the ``external_system`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the external system resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([external_system, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateExternalSystemRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateExternalSystemRequest): - request = securitycenter_service.UpdateExternalSystemRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if external_system is not None: - request.external_system = external_system - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_external_system] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("external_system.name", request.external_system.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_mute_config(self, - request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, - *, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Updates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = client.update_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]): - The request object. Request message for updating a mute - config. - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being - updated. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([mute_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateMuteConfigRequest): - request = securitycenter_service.UpdateMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if mute_config is not None: - request.mute_config = mute_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("mute_config.name", request.mute_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]): - The request object. Request message for updating a - notification config. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): - request = securitycenter_service.UpdateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( - ) - - # Make the request - response = client.update_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for updating security - health analytics custom modules. - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. The SecurityHealthAnalytics - custom module to update. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to update. - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_health_analytics_custom_module, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_big_query_export(self, - request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, - *, - parent: Optional[str] = None, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - big_query_export_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Creates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = client.create_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]): - The request object. Request message for creating a - BigQuery export. - parent (str): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being - created. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``big_query_export_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, big_query_export, big_query_export_id]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateBigQueryExportRequest): - request = securitycenter_service.CreateBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if big_query_export is not None: - request.big_query_export = big_query_export - if big_query_export_id is not None: - request.big_query_export_id = big_query_export_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_big_query_export(self, - request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - client.delete_big_query_export(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]): - The request object. Request message for deleting a - BigQuery export. - name (str): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteBigQueryExportRequest): - request = securitycenter_service.DeleteBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def update_big_query_export(self, - request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, - *, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Updates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = client.update_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]): - The request object. Request message for updating a - BigQuery export. - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being - updated. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([big_query_export, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateBigQueryExportRequest): - request = securitycenter_service.UpdateBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if big_query_export is not None: - request.big_query_export = big_query_export - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("big_query_export.name", request.big_query_export.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_big_query_exports(self, - request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListBigQueryExportsPager: - r"""Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - parent (str): - Required. The parent, which owns the collection of - BigQuery exports. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager: - Response message for listing BigQuery - exports. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListBigQueryExportsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListBigQueryExportsRequest): - request = securitycenter_service.ListBigQueryExportsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_big_query_exports] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListBigQueryExportsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - def list_operations( - self, - request: Optional[operations_pb2.ListOperationsRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.ListOperationsResponse: - r"""Lists operations that match the specified filter in the request. - - Args: - request (:class:`~.operations_pb2.ListOperationsRequest`): - The request object. Request message for - `ListOperations` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.ListOperationsResponse: - Response message for ``ListOperations`` method. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.ListOperationsRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.list_operations, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - def get_operation( - self, - request: Optional[operations_pb2.GetOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.Operation: - r"""Gets the latest state of a long-running operation. - - Args: - request (:class:`~.operations_pb2.GetOperationRequest`): - The request object. Request message for - `GetOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.Operation: - An ``Operation`` object. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.GetOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.get_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - def delete_operation( - self, - request: Optional[operations_pb2.DeleteOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a long-running operation. - - This method indicates that the client is no longer interested - in the operation result. It does not cancel the operation. - If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.DeleteOperationRequest`): - The request object. Request message for - `DeleteOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.DeleteOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.delete_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - def cancel_operation( - self, - request: Optional[operations_pb2.CancelOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Starts asynchronous cancellation on a long-running operation. - - The server makes a best effort to cancel the operation, but success - is not guaranteed. If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.CancelOperationRequest`): - The request object. Request message for - `CancelOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.CancelOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.cancel_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py deleted file mode 100644 index 14121825..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py +++ /dev/null @@ -1,1355 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - for page in self.pages: - yield from page.list_findings_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_findings_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListMuteConfigsPager: - """A pager for iterating through ``list_mute_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``mute_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListMuteConfigs`` requests and continue to iterate - through the ``mute_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListMuteConfigsResponse], - request: securitycenter_service.ListMuteConfigsRequest, - response: securitycenter_service.ListMuteConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListMuteConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListMuteConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[mute_config.MuteConfig]: - for page in self.pages: - yield from page.mute_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListMuteConfigsAsyncPager: - """A pager for iterating through ``list_mute_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``mute_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListMuteConfigs`` requests and continue to iterate - through the ``mute_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListMuteConfigsResponse]], - request: securitycenter_service.ListMuteConfigsRequest, - response: securitycenter_service.ListMuteConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListMuteConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListMuteConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[mute_config.MuteConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.mute_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[notification_config.NotificationConfig]: - for page in self.pages: - yield from page.notification_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsAsyncPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.notification_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``effective_security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``effective_security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.effective_security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``effective_security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``effective_security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.effective_security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListBigQueryExportsPager: - """A pager for iterating through ``list_big_query_exports`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``big_query_exports`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListBigQueryExports`` requests and continue to iterate - through the ``big_query_exports`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListBigQueryExportsResponse], - request: securitycenter_service.ListBigQueryExportsRequest, - response: securitycenter_service.ListBigQueryExportsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListBigQueryExportsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListBigQueryExportsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[bigquery_export.BigQueryExport]: - for page in self.pages: - yield from page.big_query_exports - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListBigQueryExportsAsyncPager: - """A pager for iterating through ``list_big_query_exports`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``big_query_exports`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListBigQueryExports`` requests and continue to iterate - through the ``big_query_exports`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListBigQueryExportsResponse]], - request: securitycenter_service.ListBigQueryExportsRequest, - response: securitycenter_service.ListBigQueryExportsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListBigQueryExportsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListBigQueryExportsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[bigquery_export.BigQueryExport]: - async def async_generator(): - async for page in self.pages: - for response in page.big_query_exports: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py deleted file mode 100644 index 96f2f1cd..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py +++ /dev/null @@ -1,925 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.bulk_mute_findings: gapic_v1.method.wrap_method( - self.bulk_mute_findings, - default_timeout=None, - client_info=client_info, - ), - self.create_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.create_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.create_mute_config: gapic_v1.method.wrap_method( - self.create_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.create_notification_config: gapic_v1.method.wrap_method( - self.create_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_mute_config: gapic_v1.method.wrap_method( - self.delete_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.delete_notification_config: gapic_v1.method.wrap_method( - self.delete_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.delete_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.get_big_query_export: gapic_v1.method.wrap_method( - self.get_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_mute_config: gapic_v1.method.wrap_method( - self.get_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.get_notification_config: gapic_v1.method.wrap_method( - self.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_effective_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.get_effective_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.get_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_descendant_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_descendant_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_mute_configs: gapic_v1.method.wrap_method( - self.list_mute_configs, - default_timeout=None, - client_info=client_info, - ), - self.list_notification_configs: gapic_v1.method.wrap_method( - self.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_effective_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_effective_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_mute: gapic_v1.method.wrap_method( - self.set_mute, - default_timeout=None, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_external_system: gapic_v1.method.wrap_method( - self.update_external_system, - default_timeout=None, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_mute_config: gapic_v1.method.wrap_method( - self.update_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.update_notification_config: gapic_v1.method.wrap_method( - self.update_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.update_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - self.create_big_query_export: gapic_v1.method.wrap_method( - self.create_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.delete_big_query_export: gapic_v1.method.wrap_method( - self.delete_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.update_big_query_export: gapic_v1.method.wrap_method( - self.update_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.list_big_query_exports: gapic_v1.method.wrap_method( - self.list_big_query_exports, - default_timeout=None, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - Union[ - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - Union[ - gcs_mute_config.MuteConfig, - Awaitable[gcs_mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - Union[ - mute_config.MuteConfig, - Awaitable[mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Union[ - notification_config.NotificationConfig, - Awaitable[notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Union[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, - Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - Union[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - Union[ - securitycenter_service.ListMuteConfigsResponse, - Awaitable[securitycenter_service.ListMuteConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Union[ - securitycenter_service.ListNotificationConfigsResponse, - Awaitable[securitycenter_service.ListNotificationConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - Union[ - gcs_external_system.ExternalSystem, - Awaitable[gcs_external_system.ExternalSystem] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - Union[ - gcs_mute_config.MuteConfig, - Awaitable[gcs_mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Union[ - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - Union[ - securitycenter_service.ListBigQueryExportsResponse, - Awaitable[securitycenter_service.ListBigQueryExportsResponse] - ]]: - raise NotImplementedError() - - @property - def list_operations( - self, - ) -> Callable[ - [operations_pb2.ListOperationsRequest], - Union[operations_pb2.ListOperationsResponse, Awaitable[operations_pb2.ListOperationsResponse]], - ]: - raise NotImplementedError() - - @property - def get_operation( - self, - ) -> Callable[ - [operations_pb2.GetOperationRequest], - Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], - ]: - raise NotImplementedError() - - @property - def cancel_operation( - self, - ) -> Callable[ - [operations_pb2.CancelOperationRequest], - None, - ]: - raise NotImplementedError() - - @property - def delete_operation( - self, - ) -> Callable[ - [operations_pb2.DeleteOperationRequest], - None, - ]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py deleted file mode 100644 index 6864d7f9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,1555 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - operations_pb2.Operation]: - r"""Return a callable for the bulk mute findings method over gRPC. - - Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - Returns: - Callable[[~.BulkMuteFindingsRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'bulk_mute_findings' not in self._stubs: - self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', - request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['bulk_mute_findings'] - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the create security health - analytics custom module method over gRPC. - - Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - Returns: - Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_security_health_analytics_custom_module' not in self._stubs: - self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['create_security_health_analytics_custom_module'] - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - r"""Return a callable for the create mute config method over gRPC. - - Creates a mute config. - - Returns: - Callable[[~.CreateMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_mute_config' not in self._stubs: - self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', - request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['create_mute_config'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete mute config method over gRPC. - - Deletes an existing mute config. - - Returns: - Callable[[~.DeleteMuteConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_mute_config' not in self._stubs: - self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', - request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_mute_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete security health - analytics custom module method over gRPC. - - Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - Returns: - Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_security_health_analytics_custom_module' not in self._stubs: - self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_security_health_analytics_custom_module'] - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the get big query export method over gRPC. - - Gets a BigQuery export. - - Returns: - Callable[[~.GetBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_big_query_export' not in self._stubs: - self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', - request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['get_big_query_export'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - mute_config.MuteConfig]: - r"""Return a callable for the get mute config method over gRPC. - - Gets a mute config. - - Returns: - Callable[[~.GetMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_mute_config' not in self._stubs: - self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', - request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, - response_deserializer=mute_config.MuteConfig.deserialize, - ) - return self._stubs['get_mute_config'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the get effective security health - analytics custom module method over gRPC. - - Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - ~.EffectiveSecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_effective_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_effective_security_health_analytics_custom_module'] - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the get security health analytics - custom module method over gRPC. - - Retrieves a SecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_security_health_analytics_custom_module'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list descendant security - health analytics custom modules method over gRPC. - - Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - Returns: - Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - ~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_descendant_security_health_analytics_custom_modules'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - securitycenter_service.ListMuteConfigsResponse]: - r"""Return a callable for the list mute configs method over gRPC. - - Lists mute configs. - - Returns: - Callable[[~.ListMuteConfigsRequest], - ~.ListMuteConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_mute_configs' not in self._stubs: - self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', - request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, - ) - return self._stubs['list_mute_configs'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - ~.ListNotificationConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list effective security health - analytics custom modules method over gRPC. - - Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - Returns: - Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - ~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_effective_security_health_analytics_custom_modules'] - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list security health analytics - custom modules method over gRPC. - - Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - Returns: - Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], - ~.ListSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_security_health_analytics_custom_modules'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - finding.Finding]: - r"""Return a callable for the set mute method over gRPC. - - Updates the mute state of a finding. - - Returns: - Callable[[~.SetMuteRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_mute' not in self._stubs: - self._stubs['set_mute'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', - request_serializer=securitycenter_service.SetMuteRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_mute'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - gcs_external_system.ExternalSystem]: - r"""Return a callable for the update external system method over gRPC. - - Updates external system. This is for a given finding. - - Returns: - Callable[[~.UpdateExternalSystemRequest], - ~.ExternalSystem]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_external_system' not in self._stubs: - self._stubs['update_external_system'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', - request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, - response_deserializer=gcs_external_system.ExternalSystem.deserialize, - ) - return self._stubs['update_external_system'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - r"""Return a callable for the update mute config method over gRPC. - - Updates a mute config. - - Returns: - Callable[[~.UpdateMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_mute_config' not in self._stubs: - self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', - request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['update_mute_config'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the update security health - analytics custom module method over gRPC. - - Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - Returns: - Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_health_analytics_custom_module' not in self._stubs: - self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['update_security_health_analytics_custom_module'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the create big query export method over gRPC. - - Creates a BigQuery export. - - Returns: - Callable[[~.CreateBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_big_query_export' not in self._stubs: - self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', - request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['create_big_query_export'] - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete big query export method over gRPC. - - Deletes an existing BigQuery export. - - Returns: - Callable[[~.DeleteBigQueryExportRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_big_query_export' not in self._stubs: - self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', - request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_big_query_export'] - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the update big query export method over gRPC. - - Updates a BigQuery export. - - Returns: - Callable[[~.UpdateBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_big_query_export' not in self._stubs: - self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', - request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['update_big_query_export'] - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - securitycenter_service.ListBigQueryExportsResponse]: - r"""Return a callable for the list big query exports method over gRPC. - - Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - Returns: - Callable[[~.ListBigQueryExportsRequest], - ~.ListBigQueryExportsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_big_query_exports' not in self._stubs: - self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', - request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, - response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, - ) - return self._stubs['list_big_query_exports'] - - def close(self): - self.grpc_channel.close() - - @property - def delete_operation( - self, - ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: - r"""Return a callable for the delete_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "delete_operation" not in self._stubs: - self._stubs["delete_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/DeleteOperation", - request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["delete_operation"] - - @property - def cancel_operation( - self, - ) -> Callable[[operations_pb2.CancelOperationRequest], None]: - r"""Return a callable for the cancel_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "cancel_operation" not in self._stubs: - self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/CancelOperation", - request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["cancel_operation"] - - @property - def get_operation( - self, - ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: - r"""Return a callable for the get_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "get_operation" not in self._stubs: - self._stubs["get_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/GetOperation", - request_serializer=operations_pb2.GetOperationRequest.SerializeToString, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs["get_operation"] - - @property - def list_operations( - self, - ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: - r"""Return a callable for the list_operations method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "list_operations" not in self._stubs: - self._stubs["list_operations"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/ListOperations", - request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, - response_deserializer=operations_pb2.ListOperationsResponse.FromString, - ) - return self._stubs["list_operations"] - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 8fa655b4..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,1554 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the bulk mute findings method over gRPC. - - Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - Returns: - Callable[[~.BulkMuteFindingsRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'bulk_mute_findings' not in self._stubs: - self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', - request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['bulk_mute_findings'] - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the create security health - analytics custom module method over gRPC. - - Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - Returns: - Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_security_health_analytics_custom_module' not in self._stubs: - self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['create_security_health_analytics_custom_module'] - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - Awaitable[gcs_mute_config.MuteConfig]]: - r"""Return a callable for the create mute config method over gRPC. - - Creates a mute config. - - Returns: - Callable[[~.CreateMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_mute_config' not in self._stubs: - self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', - request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['create_mute_config'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete mute config method over gRPC. - - Deletes an existing mute config. - - Returns: - Callable[[~.DeleteMuteConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_mute_config' not in self._stubs: - self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', - request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_mute_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete security health - analytics custom module method over gRPC. - - Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - Returns: - Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_security_health_analytics_custom_module' not in self._stubs: - self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_security_health_analytics_custom_module'] - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the get big query export method over gRPC. - - Gets a BigQuery export. - - Returns: - Callable[[~.GetBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_big_query_export' not in self._stubs: - self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', - request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['get_big_query_export'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - Awaitable[mute_config.MuteConfig]]: - r"""Return a callable for the get mute config method over gRPC. - - Gets a mute config. - - Returns: - Callable[[~.GetMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_mute_config' not in self._stubs: - self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', - request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, - response_deserializer=mute_config.MuteConfig.deserialize, - ) - return self._stubs['get_mute_config'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Awaitable[notification_config.NotificationConfig]]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the get effective security health - analytics custom module method over gRPC. - - Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.EffectiveSecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_effective_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_effective_security_health_analytics_custom_module'] - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the get security health analytics - custom module method over gRPC. - - Retrieves a SecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_security_health_analytics_custom_module'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list descendant security - health analytics custom modules method over gRPC. - - Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - Returns: - Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_descendant_security_health_analytics_custom_modules'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - Awaitable[securitycenter_service.ListMuteConfigsResponse]]: - r"""Return a callable for the list mute configs method over gRPC. - - Lists mute configs. - - Returns: - Callable[[~.ListMuteConfigsRequest], - Awaitable[~.ListMuteConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_mute_configs' not in self._stubs: - self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', - request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, - ) - return self._stubs['list_mute_configs'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - Awaitable[~.ListNotificationConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list effective security health - analytics custom modules method over gRPC. - - Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - Returns: - Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_effective_security_health_analytics_custom_modules'] - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list security health analytics - custom modules method over gRPC. - - Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - Returns: - Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_security_health_analytics_custom_modules'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set mute method over gRPC. - - Updates the mute state of a finding. - - Returns: - Callable[[~.SetMuteRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_mute' not in self._stubs: - self._stubs['set_mute'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', - request_serializer=securitycenter_service.SetMuteRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_mute'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - Awaitable[gcs_external_system.ExternalSystem]]: - r"""Return a callable for the update external system method over gRPC. - - Updates external system. This is for a given finding. - - Returns: - Callable[[~.UpdateExternalSystemRequest], - Awaitable[~.ExternalSystem]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_external_system' not in self._stubs: - self._stubs['update_external_system'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', - request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, - response_deserializer=gcs_external_system.ExternalSystem.deserialize, - ) - return self._stubs['update_external_system'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - Awaitable[gcs_mute_config.MuteConfig]]: - r"""Return a callable for the update mute config method over gRPC. - - Updates a mute config. - - Returns: - Callable[[~.UpdateMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_mute_config' not in self._stubs: - self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', - request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['update_mute_config'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the update security health - analytics custom module method over gRPC. - - Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - Returns: - Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_health_analytics_custom_module' not in self._stubs: - self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['update_security_health_analytics_custom_module'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the create big query export method over gRPC. - - Creates a BigQuery export. - - Returns: - Callable[[~.CreateBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_big_query_export' not in self._stubs: - self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', - request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['create_big_query_export'] - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete big query export method over gRPC. - - Deletes an existing BigQuery export. - - Returns: - Callable[[~.DeleteBigQueryExportRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_big_query_export' not in self._stubs: - self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', - request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_big_query_export'] - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the update big query export method over gRPC. - - Updates a BigQuery export. - - Returns: - Callable[[~.UpdateBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_big_query_export' not in self._stubs: - self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', - request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['update_big_query_export'] - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - Awaitable[securitycenter_service.ListBigQueryExportsResponse]]: - r"""Return a callable for the list big query exports method over gRPC. - - Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - Returns: - Callable[[~.ListBigQueryExportsRequest], - Awaitable[~.ListBigQueryExportsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_big_query_exports' not in self._stubs: - self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', - request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, - response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, - ) - return self._stubs['list_big_query_exports'] - - def close(self): - return self.grpc_channel.close() - - @property - def delete_operation( - self, - ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: - r"""Return a callable for the delete_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "delete_operation" not in self._stubs: - self._stubs["delete_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/DeleteOperation", - request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["delete_operation"] - - @property - def cancel_operation( - self, - ) -> Callable[[operations_pb2.CancelOperationRequest], None]: - r"""Return a callable for the cancel_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "cancel_operation" not in self._stubs: - self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/CancelOperation", - request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["cancel_operation"] - - @property - def get_operation( - self, - ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: - r"""Return a callable for the get_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "get_operation" not in self._stubs: - self._stubs["get_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/GetOperation", - request_serializer=operations_pb2.GetOperationRequest.SerializeToString, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs["get_operation"] - - @property - def list_operations( - self, - ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: - r"""Return a callable for the list_operations method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "list_operations" not in self._stubs: - self._stubs["list_operations"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/ListOperations", - request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, - response_deserializer=operations_pb2.ListOperationsResponse.FromString, - ) - return self._stubs["list_operations"] - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py deleted file mode 100644 index d1aad202..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py +++ /dev/null @@ -1,6237 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from google.longrunning import operations_pb2 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_bulk_mute_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_bulk_mute_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_delete_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_get_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_effective_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_effective_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_big_query_exports(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_big_query_exports(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_descendant_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_descendant_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_effective_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_effective_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_mute_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_mute_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_notification_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_notification_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_mute(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_mute(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_external_system(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_external_system(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_bulk_mute_findings(self, request: securitycenter_service.BulkMuteFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.BulkMuteFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for bulk_mute_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_bulk_mute_findings(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for bulk_mute_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_big_query_export(self, request: securitycenter_service.CreateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for create_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_mute_config(self, request: securitycenter_service.CreateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: - """Post-rpc interceptor for create_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_security_health_analytics_custom_module(self, request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for create_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_big_query_export(self, request: securitycenter_service.DeleteBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_mute_config(self, request: securitycenter_service.DeleteMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_security_health_analytics_custom_module(self, request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_get_big_query_export(self, request: securitycenter_service.GetBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for get_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_effective_security_health_analytics_custom_module(self, request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_effective_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_effective_security_health_analytics_custom_module(self, response: effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for get_effective_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_mute_config(self, request: securitycenter_service.GetMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_mute_config(self, response: mute_config.MuteConfig) -> mute_config.MuteConfig: - """Post-rpc interceptor for get_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: - """Post-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_security_health_analytics_custom_module(self, request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_security_health_analytics_custom_module(self, response: security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for get_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_big_query_exports(self, request: securitycenter_service.ListBigQueryExportsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListBigQueryExportsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_big_query_exports - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_big_query_exports(self, response: securitycenter_service.ListBigQueryExportsResponse) -> securitycenter_service.ListBigQueryExportsResponse: - """Post-rpc interceptor for list_big_query_exports - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_descendant_security_health_analytics_custom_modules(self, request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_descendant_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_descendant_security_health_analytics_custom_modules(self, response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_descendant_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_effective_security_health_analytics_custom_modules(self, request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_effective_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_effective_security_health_analytics_custom_modules(self, response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_effective_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_mute_configs(self, request: securitycenter_service.ListMuteConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListMuteConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_mute_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_mute_configs(self, response: securitycenter_service.ListMuteConfigsResponse) -> securitycenter_service.ListMuteConfigsResponse: - """Post-rpc interceptor for list_mute_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: - """Post-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_security_health_analytics_custom_modules(self, request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_security_health_analytics_custom_modules(self, response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_mute(self, request: securitycenter_service.SetMuteRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetMuteRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_mute - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_mute(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_mute - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_big_query_export(self, request: securitycenter_service.UpdateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for update_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_external_system(self, request: securitycenter_service.UpdateExternalSystemRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateExternalSystemRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_external_system - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_external_system(self, response: gcs_external_system.ExternalSystem) -> gcs_external_system.ExternalSystem: - """Post-rpc interceptor for update_external_system - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_mute_config(self, request: securitycenter_service.UpdateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: - """Post-rpc interceptor for update_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_health_analytics_custom_module(self, request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for update_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - def pre_cancel_operation( - self, request: operations_pb2.CancelOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.CancelOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for cancel_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_cancel_operation( - self, response: None - ) -> None: - """Post-rpc interceptor for cancel_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_operation( - self, request: operations_pb2.DeleteOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.DeleteOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_delete_operation( - self, response: None - ) -> None: - """Post-rpc interceptor for delete_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_operation( - self, request: operations_pb2.GetOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.GetOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_operation( - self, response: operations_pb2.Operation - ) -> operations_pb2.Operation: - """Post-rpc interceptor for get_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_operations( - self, request: operations_pb2.ListOperationsRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.ListOperationsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_operations - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_operations( - self, response: operations_pb2.ListOperationsResponse - ) -> operations_pb2.ListOperationsResponse: - """Post-rpc interceptor for list_operations - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1/{name=organizations/*/operations/*}:cancel', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _BulkMuteFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("BulkMuteFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.BulkMuteFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the bulk mute findings method over HTTP. - - Args: - request (~.securitycenter_service.BulkMuteFindingsRequest): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/findings:bulkMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/findings:bulkMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/findings:bulkMute', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_bulk_mute_findings(request, metadata) - pb_request = securitycenter_service.BulkMuteFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_bulk_mute_findings(resp) - return resp - - class _CreateBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "bigQueryExportId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the create big query export method over HTTP. - - Args: - request (~.securitycenter_service.CreateBigQueryExportRequest): - The request object. Request message for creating a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/bigQueryExports', - 'body': 'big_query_export', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/bigQueryExports', - 'body': 'big_query_export', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/bigQueryExports', - 'body': 'big_query_export', - }, - ] - request, metadata = self._interceptor.pre_create_big_query_export(request, metadata) - pb_request = securitycenter_service.CreateBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_big_query_export(resp) - return resp - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "muteConfigId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_mute_config.MuteConfig: - r"""Call the create mute config method over HTTP. - - Args: - request (~.securitycenter_service.CreateMuteConfigRequest): - The request object. Request message for creating a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/muteConfigs', - 'body': 'mute_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/muteConfigs', - 'body': 'mute_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/muteConfigs', - 'body': 'mute_config', - }, - ] - request, metadata = self._interceptor.pre_create_mute_config(request, metadata) - pb_request = securitycenter_service.CreateMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_mute_config.MuteConfig() - pb_resp = gcs_mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_mute_config(resp) - return resp - - class _CreateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "configId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the create notification - config method over HTTP. - - Args: - request (~.securitycenter_service.CreateNotificationConfigRequest): - The request object. Request message for creating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/notificationConfigs', - 'body': 'notification_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/notificationConfigs', - 'body': 'notification_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/notificationConfigs', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_create_notification_config(request, metadata) - pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_notification_config(resp) - return resp - - class _CreateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the create security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for creating security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, - ] - request, metadata = self._interceptor.pre_create_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_security_health_analytics_custom_module(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _DeleteBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete big query export method over HTTP. - - Args: - request (~.securitycenter_service.DeleteBigQueryExportRequest): - The request object. Request message for deleting a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/bigQueryExports/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/bigQueryExports/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_big_query_export(request, metadata) - pb_request = securitycenter_service.DeleteBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete mute config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteMuteConfigRequest): - The request object. Request message for deleting a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/muteConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/muteConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/muteConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_mute_config(request, metadata) - pb_request = securitycenter_service.DeleteMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete notification - config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteNotificationConfigRequest): - The request object. Request message for deleting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/notificationConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) - pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for deleting security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _GetBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("GetBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the get big query export method over HTTP. - - Args: - request (~.securitycenter_service.GetBigQueryExportRequest): - The request object. Request message for retrieving a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/bigQueryExports/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/bigQueryExports/*}', - }, - ] - request, metadata = self._interceptor.pre_get_big_query_export(request, metadata) - pb_request = securitycenter_service.GetBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_big_query_export(resp) - return resp - - class _GetEffectiveSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("GetEffectiveSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Call the get effective security - health analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for getting effective - security health analytics custom - modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the - representation of a Security Health Analytics custom - module at a specified level of the resource hierarchy: - organization, folder, or project. If a custom module is - inherited from a parent organization or folder, the - value of the ``enablementState`` property in - EffectiveSecurityHealthAnalyticsCustomModule is set to - the value that is effective in the parent, instead of - ``INHERITED``. For example, if the module is enabled in - a parent organization or folder, the effective - enablement_state for the module in all child folders or - projects is also ``enabled``. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, - ] - request, metadata = self._interceptor.pre_get_effective_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - pb_resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_effective_security_health_analytics_custom_module(resp) - return resp - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> mute_config.MuteConfig: - r"""Call the get mute config method over HTTP. - - Args: - request (~.securitycenter_service.GetMuteConfigRequest): - The request object. Request message for retrieving a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/muteConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/muteConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/muteConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_mute_config(request, metadata) - pb_request = securitycenter_service.GetMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = mute_config.MuteConfig() - pb_resp = mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_mute_config(resp) - return resp - - class _GetNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> notification_config.NotificationConfig: - r"""Call the get notification config method over HTTP. - - Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/notificationConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_notification_config(request, metadata) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the get security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for getting security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - }, - ] - request, metadata = self._interceptor.pre_get_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_security_health_analytics_custom_module(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListBigQueryExports(SecurityCenterRestStub): - def __hash__(self): - return hash("ListBigQueryExports") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListBigQueryExportsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListBigQueryExportsResponse: - r"""Call the list big query exports method over HTTP. - - Args: - request (~.securitycenter_service.ListBigQueryExportsRequest): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListBigQueryExportsResponse: - Response message for listing BigQuery - exports. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/bigQueryExports', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/bigQueryExports', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/bigQueryExports', - }, - ] - request, metadata = self._interceptor.pre_list_big_query_exports(request, metadata) - pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListBigQueryExportsResponse() - pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_big_query_exports(resp) - return resp - - class _ListDescendantSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListDescendantSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list descendant security - health analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing - descendant security health analytics - custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing - descendant security health analytics - custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, - ] - request, metadata = self._interceptor.pre_list_descendant_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_descendant_security_health_analytics_custom_modules(resp) - return resp - - class _ListEffectiveSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListEffectiveSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list effective security - health analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing effective - security health analytics custom - modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing - effective security health analytics - custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, - ] - request, metadata = self._interceptor.pre_list_effective_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_effective_security_health_analytics_custom_modules(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListMuteConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListMuteConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListMuteConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListMuteConfigsResponse: - r"""Call the list mute configs method over HTTP. - - Args: - request (~.securitycenter_service.ListMuteConfigsRequest): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListMuteConfigsResponse: - Response message for listing mute - configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/muteConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/muteConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/muteConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_mute_configs(request, metadata) - pb_request = securitycenter_service.ListMuteConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListMuteConfigsResponse() - pb_resp = securitycenter_service.ListMuteConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_mute_configs(resp) - return resp - - class _ListNotificationConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListNotificationConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListNotificationConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListNotificationConfigsResponse: - r"""Call the list notification configs method over HTTP. - - Args: - request (~.securitycenter_service.ListNotificationConfigsRequest): - The request object. Request message for listing - notification configs. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListNotificationConfigsResponse: - Response message for listing - notification configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/notificationConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/notificationConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/notificationConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) - pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListNotificationConfigsResponse() - pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_notification_configs(resp) - return resp - - class _ListSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list security health - analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing security - health analytics custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', - }, - ] - request, metadata = self._interceptor.pre_list_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_security_health_analytics_custom_modules(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _SetMute(SecurityCenterRestStub): - def __hash__(self): - return hash("SetMute") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetMuteRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set mute method over HTTP. - - Args: - request (~.securitycenter_service.SetMuteRequest): - The request object. Request message for updating a - finding's mute status. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setMute', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_mute(request, metadata) - pb_request = securitycenter_service.SetMuteRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_mute(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the update big query export method over HTTP. - - Args: - request (~.securitycenter_service.UpdateBigQueryExportRequest): - The request object. Request message for updating a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=organizations/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, -{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=folders/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, -{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=projects/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, - ] - request, metadata = self._interceptor.pre_update_big_query_export(request, metadata) - pb_request = securitycenter_service.UpdateBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_big_query_export(resp) - return resp - - class _UpdateExternalSystem(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateExternalSystem") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateExternalSystemRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_external_system.ExternalSystem: - r"""Call the update external system method over HTTP. - - Args: - request (~.securitycenter_service.UpdateExternalSystemRequest): - The request object. Request message for updating a - ExternalSystem resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_external_system.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, -{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=folders/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, -{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=projects/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, - ] - request, metadata = self._interceptor.pre_update_external_system(request, metadata) - pb_request = securitycenter_service.UpdateExternalSystemRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_external_system.ExternalSystem() - pb_resp = gcs_external_system.ExternalSystem.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_external_system(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1/{finding.name=folders/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1/{finding.name=projects/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_mute_config.MuteConfig: - r"""Call the update mute config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateMuteConfigRequest): - The request object. Request message for updating a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=organizations/*/muteConfigs/*}', - 'body': 'mute_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=folders/*/muteConfigs/*}', - 'body': 'mute_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=projects/*/muteConfigs/*}', - 'body': 'mute_config', - }, - ] - request, metadata = self._interceptor.pre_update_mute_config(request, metadata) - pb_request = securitycenter_service.UpdateMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_mute_config.MuteConfig() - pb_resp = gcs_mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_mute_config(resp) - return resp - - class _UpdateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the update notification - config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateNotificationConfigRequest): - The request object. Request message for updating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=organizations/*/notificationConfigs/*}', - 'body': 'notification_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=folders/*/notificationConfigs/*}', - 'body': 'notification_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=projects/*/notificationConfigs/*}', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_update_notification_config(request, metadata) - pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_notification_config(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the update security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for updating security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, - ] - request, metadata = self._interceptor.pre_update_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_health_analytics_custom_module(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=folders/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=projects/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._BulkMuteFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetEffectiveSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - securitycenter_service.ListBigQueryExportsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListBigQueryExports(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListDescendantSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListEffectiveSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - securitycenter_service.ListMuteConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListMuteConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetMute(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - gcs_external_system.ExternalSystem]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateExternalSystem(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def cancel_operation(self): - return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore - - class _CancelOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.CancelOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> None: - - r"""Call the cancel operation method over HTTP. - - Args: - request (operations_pb2.CancelOperationRequest): - The request object for CancelOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/operations/*}:cancel', - }, - ] - - request, metadata = self._interceptor.pre_cancel_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - return self._interceptor.post_cancel_operation(None) - - @property - def delete_operation(self): - return self._DeleteOperation(self._session, self._host, self._interceptor) # type: ignore - - class _DeleteOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.DeleteOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> None: - - r"""Call the delete operation method over HTTP. - - Args: - request (operations_pb2.DeleteOperationRequest): - The request object for DeleteOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ] - - request, metadata = self._interceptor.pre_delete_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - return self._interceptor.post_delete_operation(None) - - @property - def get_operation(self): - return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore - - class _GetOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.GetOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - - r"""Call the get operation method over HTTP. - - Args: - request (operations_pb2.GetOperationRequest): - The request object for GetOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - operations_pb2.Operation: Response from GetOperation method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ] - - request, metadata = self._interceptor.pre_get_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - resp = operations_pb2.Operation() - resp = json_format.Parse(response.content.decode("utf-8"), resp) - resp = self._interceptor.post_get_operation(resp) - return resp - - @property - def list_operations(self): - return self._ListOperations(self._session, self._host, self._interceptor) # type: ignore - - class _ListOperations(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.ListOperationsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.ListOperationsResponse: - - r"""Call the list operations method over HTTP. - - Args: - request (operations_pb2.ListOperationsRequest): - The request object for ListOperations method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - operations_pb2.ListOperationsResponse: Response from ListOperations method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations}', - }, - ] - - request, metadata = self._interceptor.pre_list_operations(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - resp = operations_pb2.ListOperationsResponse() - resp = json_format.Parse(response.content.decode("utf-8"), resp) - resp = self._interceptor.post_list_operations(resp) - return resp - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py deleted file mode 100644 index 3b48f777..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- 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. -# -from .access import ( - Access, - Geolocation, - ServiceAccountDelegationInfo, -) -from .asset import ( - Asset, -) -from .bigquery_export import ( - BigQueryExport, -) -from .compliance import ( - Compliance, -) -from .connection import ( - Connection, -) -from .contact_details import ( - Contact, - ContactDetails, -) -from .container import ( - Container, -) -from .database import ( - Database, -) -from .effective_security_health_analytics_custom_module import ( - EffectiveSecurityHealthAnalyticsCustomModule, -) -from .exfiltration import ( - ExfilResource, - Exfiltration, -) -from .external_system import ( - ExternalSystem, -) -from .file import ( - File, -) -from .finding import ( - Finding, -) -from .folder import ( - Folder, -) -from .iam_binding import ( - IamBinding, -) -from .indicator import ( - Indicator, -) -from .kernel_rootkit import ( - KernelRootkit, -) -from .kubernetes import ( - Kubernetes, -) -from .label import ( - Label, -) -from .mitre_attack import ( - MitreAttack, -) -from .mute_config import ( - MuteConfig, -) -from .notification_config import ( - NotificationConfig, -) -from .notification_message import ( - NotificationMessage, -) -from .organization_settings import ( - OrganizationSettings, -) -from .process import ( - EnvironmentVariable, - Process, -) -from .resource import ( - Resource, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_health_analytics_custom_config import ( - CustomConfig, -) -from .security_health_analytics_custom_module import ( - SecurityHealthAnalyticsCustomModule, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - BulkMuteFindingsRequest, - BulkMuteFindingsResponse, - CreateBigQueryExportRequest, - CreateFindingRequest, - CreateMuteConfigRequest, - CreateNotificationConfigRequest, - CreateSecurityHealthAnalyticsCustomModuleRequest, - CreateSourceRequest, - DeleteBigQueryExportRequest, - DeleteMuteConfigRequest, - DeleteNotificationConfigRequest, - DeleteSecurityHealthAnalyticsCustomModuleRequest, - GetBigQueryExportRequest, - GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - GetMuteConfigRequest, - GetNotificationConfigRequest, - GetOrganizationSettingsRequest, - GetSecurityHealthAnalyticsCustomModuleRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListBigQueryExportsRequest, - ListBigQueryExportsResponse, - ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - ListFindingsRequest, - ListFindingsResponse, - ListMuteConfigsRequest, - ListMuteConfigsResponse, - ListNotificationConfigsRequest, - ListNotificationConfigsResponse, - ListSecurityHealthAnalyticsCustomModulesRequest, - ListSecurityHealthAnalyticsCustomModulesResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - SetMuteRequest, - UpdateBigQueryExportRequest, - UpdateExternalSystemRequest, - UpdateFindingRequest, - UpdateMuteConfigRequest, - UpdateNotificationConfigRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityHealthAnalyticsCustomModuleRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) -from .vulnerability import ( - Cve, - Cvssv3, - Reference, - Vulnerability, -) - -__all__ = ( - 'Access', - 'Geolocation', - 'ServiceAccountDelegationInfo', - 'Asset', - 'BigQueryExport', - 'Compliance', - 'Connection', - 'Contact', - 'ContactDetails', - 'Container', - 'Database', - 'EffectiveSecurityHealthAnalyticsCustomModule', - 'ExfilResource', - 'Exfiltration', - 'ExternalSystem', - 'File', - 'Finding', - 'Folder', - 'IamBinding', - 'Indicator', - 'KernelRootkit', - 'Kubernetes', - 'Label', - 'MitreAttack', - 'MuteConfig', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'EnvironmentVariable', - 'Process', - 'Resource', - 'RunAssetDiscoveryResponse', - 'CustomConfig', - 'SecurityHealthAnalyticsCustomModule', - 'SecurityMarks', - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateBigQueryExportRequest', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteBigQueryExportRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'UpdateBigQueryExportRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', - 'Cve', - 'Cvssv3', - 'Reference', - 'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py deleted file mode 100644 index 40e3c27a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Access', - 'ServiceAccountDelegationInfo', - 'Geolocation', - }, -) - - -class Access(proto.Message): - r"""Represents an access event. - - Attributes: - principal_email (str): - Associated email, such as "foo@google.com". - - The email address of the authenticated user (or service - account on behalf of third party principal) making the - request. For third party identity callers, the - ``principal_subject`` field is populated instead of this - field. For privacy reasons, the principal email address is - sometimes redacted. For more information, see `Caller - identities in audit - logs `__. - caller_ip (str): - Caller's IP address, such as "1.1.1.1". - caller_ip_geo (google.cloud.securitycenter_v1.types.Geolocation): - The caller IP's geolocation, which identifies - where the call came from. - user_agent_family (str): - What kind of user agent is associated, for - example operating system shells, embedded or - stand-alone applications, etc. - service_name (str): - This is the API service that the service - account made a call to, e.g. - "iam.googleapis.com". - method_name (str): - The method that the service account called, - e.g. "SetIamPolicy". - principal_subject (str): - A string representing the principal_subject associated with - the identity. As compared to ``principal_email``, supports - principals that aren't associated with email addresses, such - as third party principals. For most identities, the format - will be - ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` - except for some GKE identities (GKE_WORKLOAD, FREEFORM, - GKE_HUB_WORKLOAD) that are still in the legacy format - ``serviceAccount:{identity pool name}[{subject}]`` - service_account_key_name (str): - The name of the service account key used to create or - exchange credentials for authenticating the service account - making the request. This is a scheme-less URI full resource - name. For example: - - "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}". - service_account_delegation_info (MutableSequence[google.cloud.securitycenter_v1.types.ServiceAccountDelegationInfo]): - Identity delegation history of an - authenticated service account that makes the - request. It contains information on the real - authorities that try to access GCP resources by - delegating on a service account. When multiple - authorities are present, they are guaranteed to - be sorted based on the original ordering of the - identity delegation events. - user_name (str): - A string that represents the username of a - user, user account, or other entity involved in - the access event. What the entity is and what - its role in the access event is depends on the - finding that this field appears in. The entity - is likely not an IAM principal, but could be a - user that is logged into an operating system, if - the finding is VM-related, or a user that is - logged into some type of application that is - involved in the access event. - """ - - principal_email: str = proto.Field( - proto.STRING, - number=1, - ) - caller_ip: str = proto.Field( - proto.STRING, - number=2, - ) - caller_ip_geo: 'Geolocation' = proto.Field( - proto.MESSAGE, - number=3, - message='Geolocation', - ) - user_agent_family: str = proto.Field( - proto.STRING, - number=4, - ) - service_name: str = proto.Field( - proto.STRING, - number=5, - ) - method_name: str = proto.Field( - proto.STRING, - number=6, - ) - principal_subject: str = proto.Field( - proto.STRING, - number=7, - ) - service_account_key_name: str = proto.Field( - proto.STRING, - number=8, - ) - service_account_delegation_info: MutableSequence['ServiceAccountDelegationInfo'] = proto.RepeatedField( - proto.MESSAGE, - number=9, - message='ServiceAccountDelegationInfo', - ) - user_name: str = proto.Field( - proto.STRING, - number=11, - ) - - -class ServiceAccountDelegationInfo(proto.Message): - r"""Identity delegation history of an authenticated service - account. - - Attributes: - principal_email (str): - The email address of a Google account. - principal_subject (str): - A string representing the principal_subject associated with - the identity. As compared to ``principal_email``, supports - principals that aren't associated with email addresses, such - as third party principals. For most identities, the format - will be - ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` - except for some GKE identities (GKE_WORKLOAD, FREEFORM, - GKE_HUB_WORKLOAD) that are still in the legacy format - ``serviceAccount:{identity pool name}[{subject}]`` - """ - - principal_email: str = proto.Field( - proto.STRING, - number=1, - ) - principal_subject: str = proto.Field( - proto.STRING, - number=2, - ) - - -class Geolocation(proto.Message): - r"""Represents a geographical location for a given access. - - Attributes: - region_code (str): - A CLDR. - """ - - region_code: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py deleted file mode 100644 index 711b24bc..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py +++ /dev/null @@ -1,227 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import folder -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated - or added in Cloud SCC. - iam_policy (google.cloud.securitycenter_v1.types.Asset.IamPolicy): - Cloud IAM Policy information associated with - the Google Cloud resource described by the - Security Command Center asset. This information - is managed and defined by the Google Cloud - resource and cannot be modified by the user. - canonical_name (str): - The canonical name of the resource. It's either - "organizations/{organization_id}/assets/{asset_id}", - "folders/{folder_id}/assets/{asset_id}" or - "projects/{project_number}/assets/{asset_id}", depending on - the closest CRM ancestor of the resource. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - The full resource name of the Google Cloud resource this - asset represents. This field is immutable after create time. - See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - resource_display_name (str): - The user defined display name for this - resource. - resource_parent_display_name (str): - The user defined display name for the parent - of this resource. - resource_project_display_name (str): - The user defined display name for the project - of this resource. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - resource_display_name: str = proto.Field( - proto.STRING, - number=6, - ) - resource_parent_display_name: str = proto.Field( - proto.STRING, - number=7, - ) - resource_project_display_name: str = proto.Field( - proto.STRING, - number=8, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - class IamPolicy(proto.Message): - r"""Cloud IAM Policy information associated with the Google Cloud - resource described by the Security Command Center asset. This - information is managed and defined by the Google Cloud resource - and cannot be modified by the user. - - Attributes: - policy_blob (str): - The JSON representation of the Policy - associated with the asset. See - https://cloud.google.com/iam/reference/rest/v1/Policy - for format details. - """ - - policy_blob: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - iam_policy: IamPolicy = proto.Field( - proto.MESSAGE, - number=11, - message=IamPolicy, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=13, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py deleted file mode 100644 index 357088a4..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'BigQueryExport', - }, -) - - -class BigQueryExport(proto.Message): - r"""Configures how to deliver Findings to BigQuery Instance. - - Attributes: - name (str): - The relative resource name of this export. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name. - Example format: - "organizations/{organization_id}/bigQueryExports/{export_id}" - Example format: - "folders/{folder_id}/bigQueryExports/{export_id}" Example - format: "projects/{project_id}/bigQueryExports/{export_id}" - This field is provided in responses, and is ignored when - provided in create requests. - description (str): - The description of the export (max of 1024 - characters). - filter (str): - Expression that defines the filter to apply across - create/update events of findings. The expression is a list - of zero or more restrictions combined via logical operators - ``AND`` and ``OR``. Parentheses are supported, and ``OR`` - has higher precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - dataset (str): - The dataset to write findings' updates to. Its format is - "projects/[project_id]/datasets/[bigquery_dataset_id]". - BigQuery Dataset unique ID must contain only letters (a-z, - A-Z), numbers (0-9), or underscores (_). - create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the BigQuery - export was created. This field is set by the - server and will be ignored if provided on export - on creation. - update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time at which - the BigQuery export was updated. This field is - set by the server and will be ignored if - provided on export creation or update. - most_recent_editor (str): - Output only. Email address of the user who - last edited the BigQuery export. This field is - set by the server and will be ignored if - provided on export creation or update. - principal (str): - Output only. The service account that needs - permission to create table and upload data to - the BigQuery dataset. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - filter: str = proto.Field( - proto.STRING, - number=3, - ) - dataset: str = proto.Field( - proto.STRING, - number=4, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=6, - message=timestamp_pb2.Timestamp, - ) - most_recent_editor: str = proto.Field( - proto.STRING, - number=7, - ) - principal: str = proto.Field( - proto.STRING, - number=8, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py deleted file mode 100644 index a303fc76..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Compliance', - }, -) - - -class Compliance(proto.Message): - r"""Contains compliance information about a security standard - indicating unmet recommendations. - - Attributes: - standard (str): - Refers to industry wide standards or - benchmarks e.g. "cis", "pci", "owasp", etc. - version (str): - Version of the standard/benchmark e.g. 1.1 - ids (MutableSequence[str]): - Policies within the standard/benchmark e.g. - A.12.4.1 - """ - - standard: str = proto.Field( - proto.STRING, - number=1, - ) - version: str = proto.Field( - proto.STRING, - number=2, - ) - ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py deleted file mode 100644 index d3c78d28..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Connection', - }, -) - - -class Connection(proto.Message): - r"""Contains information about the IP connection associated with - the finding. - - Attributes: - destination_ip (str): - Destination IP address. Not present for - sockets that are listening and not connected. - destination_port (int): - Destination port. Not present for sockets - that are listening and not connected. - source_ip (str): - Source IP address. - source_port (int): - Source port. - protocol (google.cloud.securitycenter_v1.types.Connection.Protocol): - IANA Internet Protocol Number such as TCP(6) - and UDP(17). - """ - class Protocol(proto.Enum): - r"""IANA Internet Protocol Number such as TCP(6) and UDP(17). - - Values: - PROTOCOL_UNSPECIFIED (0): - Unspecified protocol (not HOPOPT). - ICMP (1): - Internet Control Message Protocol. - TCP (6): - Transmission Control Protocol. - UDP (17): - User Datagram Protocol. - GRE (47): - Generic Routing Encapsulation. - ESP (50): - Encap Security Payload. - """ - PROTOCOL_UNSPECIFIED = 0 - ICMP = 1 - TCP = 6 - UDP = 17 - GRE = 47 - ESP = 50 - - destination_ip: str = proto.Field( - proto.STRING, - number=1, - ) - destination_port: int = proto.Field( - proto.INT32, - number=2, - ) - source_ip: str = proto.Field( - proto.STRING, - number=3, - ) - source_port: int = proto.Field( - proto.INT32, - number=4, - ) - protocol: Protocol = proto.Field( - proto.ENUM, - number=5, - enum=Protocol, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py deleted file mode 100644 index 1610ec13..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'ContactDetails', - 'Contact', - }, -) - - -class ContactDetails(proto.Message): - r"""The details pertaining to specific contacts - - Attributes: - contacts (MutableSequence[google.cloud.securitycenter_v1.types.Contact]): - A list of contacts - """ - - contacts: MutableSequence['Contact'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='Contact', - ) - - -class Contact(proto.Message): - r"""The email address of a contact. - - Attributes: - email (str): - An email address. For example, "``person123@company.com``". - """ - - email: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py deleted file mode 100644 index fec5760b..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import label - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Container', - }, -) - - -class Container(proto.Message): - r"""Container associated with the finding. - - Attributes: - name (str): - Container name. - uri (str): - Container image URI provided when configuring - a pod/container. May identify a container image - version using mutable tags. - image_id (str): - Optional container image id, when provided by - the container runtime. Uniquely identifies the - container image launched using a container image - digest. - labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): - Container labels, as provided by the - container runtime. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - uri: str = proto.Field( - proto.STRING, - number=2, - ) - image_id: str = proto.Field( - proto.STRING, - number=3, - ) - labels: MutableSequence[label.Label] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=label.Label, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py deleted file mode 100644 index ba22beb7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Database', - }, -) - - -class Database(proto.Message): - r"""Represents database access information, such as queries. - A database may be a sub-resource of an instance (as in the case - of CloudSQL instances or Cloud Spanner instances), or the - database instance itself. Some database resources may not have - the full resource name populated because these resource types - are not yet supported by Cloud Asset Inventory (e.g. CloudSQL - databases). In these cases only the display name will be - provided. - - Attributes: - name (str): - The full resource name of the database the - user connected to, if it is supported by CAI. - (https://google.aip.dev/122#full-resource-names) - display_name (str): - The human readable name of the database the - user connected to. - user_name (str): - The username used to connect to the DB. This - may not necessarily be an IAM principal, and has - no required format. - query (str): - The SQL statement associated with the - relevant access. - grantees (MutableSequence[str]): - The target usernames/roles/groups of a SQL - privilege grant (not an IAM policy change). - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - user_name: str = proto.Field( - proto.STRING, - number=3, - ) - query: str = proto.Field( - proto.STRING, - number=4, - ) - grantees: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py deleted file mode 100644 index 17370e15..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Exfiltration', - 'ExfilResource', - }, -) - - -class Exfiltration(proto.Message): - r"""Exfiltration represents a data exfiltration attempt of one or - more sources to one or more targets. Sources represent the - source of data that is exfiltrated, and Targets represents the - destination the data was copied to. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): - If there are multiple sources, then the data - is considered "joined" between them. For - instance, BigQuery can join multiple tables, and - each table would be considered a source. - targets (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): - If there are multiple targets, each target - would get a complete copy of the "joined" source - data. - """ - - sources: MutableSequence['ExfilResource'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='ExfilResource', - ) - targets: MutableSequence['ExfilResource'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='ExfilResource', - ) - - -class ExfilResource(proto.Message): - r"""Resource that has been exfiltrated or exfiltrated_to. - - Attributes: - name (str): - Resource's URI - (https://google.aip.dev/122#full-resource-names) - components (MutableSequence[str]): - Subcomponents of the asset that is - exfiltrated - these could be URIs used during - exfiltration, table names, databases, filenames, - etc. For example, multiple tables may be - exfiltrated from the same CloudSQL instance, or - multiple files from the same Cloud Storage - bucket. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - components: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py deleted file mode 100644 index 809485f6..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'ExternalSystem', - }, -) - - -class ExternalSystem(proto.Message): - r"""Representation of third party SIEM/SOAR fields within SCC. - - Attributes: - name (str): - Full resource name of the external system, - for example: - "organizations/1234/sources/5678/findings/123456/externalSystems/jira", - "folders/1234/sources/5678/findings/123456/externalSystems/jira", - "projects/1234/sources/5678/findings/123456/externalSystems/jira". - assignees (MutableSequence[str]): - References primary/secondary etc assignees in - the external system. - external_uid (str): - Identifier that's used to track the given - finding in the external system. - status (str): - Most recent status of the corresponding - finding's ticket/tracker in the external system. - external_system_update_time (google.protobuf.timestamp_pb2.Timestamp): - The most recent time when the corresponding - finding's ticket/tracker was updated in the - external system. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - assignees: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - external_uid: str = proto.Field( - proto.STRING, - number=3, - ) - status: str = proto.Field( - proto.STRING, - number=4, - ) - external_system_update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py deleted file mode 100644 index 828b3580..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'File', - }, -) - - -class File(proto.Message): - r"""File information about the related binary/library used by an - executable, or the script used by a script interpreter - - Attributes: - path (str): - Absolute path of the file as a JSON encoded - string. - size (int): - Size of the file in bytes. - sha256 (str): - SHA256 hash of the first hashed_size bytes of the file - encoded as a hex string. If hashed_size == size, sha256 - represents the SHA256 hash of the entire file. - hashed_size (int): - The length in bytes of the file prefix that was hashed. If - hashed_size == size, any hashes reported represent the - entire file. - partially_hashed (bool): - True when the hash covers only a prefix of - the file. - contents (str): - Prefix of the file contents as a JSON encoded - string. (Currently only populated for Malicious - Script Executed findings.) - """ - - path: str = proto.Field( - proto.STRING, - number=1, - ) - size: int = proto.Field( - proto.INT64, - number=2, - ) - sha256: str = proto.Field( - proto.STRING, - number=3, - ) - hashed_size: int = proto.Field( - proto.INT64, - number=4, - ) - partially_hashed: bool = proto.Field( - proto.BOOL, - number=5, - ) - contents: str = proto.Field( - proto.STRING, - number=6, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py deleted file mode 100644 index a636b2ac..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py +++ /dev/null @@ -1,542 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import access as gcs_access -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import contact_details -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database as gcs_database -from google.cloud.securitycenter_v1.types import exfiltration as gcs_exfiltration -from google.cloud.securitycenter_v1.types import external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator as gcs_indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit as gcs_kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes as gcs_kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack as gcs_mitre_attack -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import vulnerability as gcs_vulnerability -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data like security, risk, - health, or privacy, that is ingested into Security Command - Center for presentation, notification, analysis, policy testing, - and enforcement. For example, a cross-site scripting (XSS) - vulnerability in an App Engine application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - The relative resource name of the source the finding belongs - to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time the finding was first detected. If - an existing finding is updated, then this is the - time the update occurred. For example, if the - finding represents an open firewall, this - property captures the time the detector believes - the firewall became open. The accuracy is - determined by the detector. If the finding is - later resolved, then this time reflects when the - finding was resolved. This must not be set to a - value greater than the current timestamp. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - severity (google.cloud.securitycenter_v1.types.Finding.Severity): - The severity of the finding. This field is - managed by the source that writes the finding. - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" - or - "projects/{project_number}/sources/{source_id}/findings/{finding_id}", - depending on the closest CRM ancestor of the resource - associated with the finding. - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Indicates the mute state of a finding (either - muted, unmuted or undefined). Unlike other - attributes of a finding, a finding provider - shouldn't set the value of mute. - finding_class (google.cloud.securitycenter_v1.types.Finding.FindingClass): - The class of the finding. - indicator (google.cloud.securitycenter_v1.types.Indicator): - Represents what's commonly known as an Indicator of - compromise (IoC) in computer forensics. This is an artifact - observed on a network or in an operating system that, with - high confidence, indicates a computer intrusion. Reference: - https://en.wikipedia.org/wiki/Indicator_of_compromise - vulnerability (google.cloud.securitycenter_v1.types.Vulnerability): - Represents vulnerability-specific fields like - CVE and CVSS scores. CVE stands for Common - Vulnerabilities and Exposures - (https://cve.mitre.org/about/) - mute_update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time this - finding was muted or unmuted. - external_systems (MutableMapping[str, google.cloud.securitycenter_v1.types.ExternalSystem]): - Output only. Third party SIEM/SOAR fields - within SCC, contains external system information - and external system finding fields. - mitre_attack (google.cloud.securitycenter_v1.types.MitreAttack): - MITRE ATT&CK tactics and techniques related - to this finding. See: https://attack.mitre.org - access (google.cloud.securitycenter_v1.types.Access): - Access details associated to the Finding, - such as more information on the caller, which - method was accessed, from where, etc. - connections (MutableSequence[google.cloud.securitycenter_v1.types.Connection]): - Contains information about the IP connection - associated with the finding. - mute_initiator (str): - First known as mute_annotation. Records additional - information about the mute operation e.g. mute config that - muted the finding, user who muted the finding, etc. Unlike - other attributes of a finding, a finding provider shouldn't - set the value of mute. - processes (MutableSequence[google.cloud.securitycenter_v1.types.Process]): - Represents operating system processes - associated with the Finding. - contacts (MutableMapping[str, google.cloud.securitycenter_v1.types.ContactDetails]): - Output only. Map containing the points of contact for the - given finding. The key represents the type of contact, while - the value contains a list of all the contacts that pertain. - Please refer to: - https://cloud.google.com/resource-manager/docs/managing-notification-contacts#notification-categories - - :: - - { - "security": { - "contacts": [ - { - "email": "person1@company.com" - }, - { - "email": "person2@company.com" - } - ] - } - } - compliances (MutableSequence[google.cloud.securitycenter_v1.types.Compliance]): - Contains compliance information for security - standards associated to the finding. - parent_display_name (str): - Output only. The human readable display name - of the finding source such as "Event Threat - Detection" or "Security Health Analytics". - description (str): - Contains more detail about the finding. - exfiltration (google.cloud.securitycenter_v1.types.Exfiltration): - Represents exfiltration associated with the - Finding. - iam_bindings (MutableSequence[google.cloud.securitycenter_v1.types.IamBinding]): - Represents IAM bindings associated with the - Finding. - next_steps (str): - Next steps associate to the finding. - module_name (str): - Unique identifier of the module which - generated the finding. Example: - folders/598186756061/securityHealthAnalyticsSettings/customModules/56799441161885 - containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): - Containers associated with the finding. - containers provides information for both - Kubernetes and non-Kubernetes containers. - kubernetes (google.cloud.securitycenter_v1.types.Kubernetes): - Kubernetes resources associated with the - finding. - database (google.cloud.securitycenter_v1.types.Database): - Database associated with the finding. - files (MutableSequence[google.cloud.securitycenter_v1.types.File]): - File associated with the finding. - kernel_rootkit (google.cloud.securitycenter_v1.types.KernelRootkit): - Kernel Rootkit signature. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - class Severity(proto.Enum): - r"""The severity of the finding. - - Values: - SEVERITY_UNSPECIFIED (0): - This value is used for findings when a source - doesn't write a severity value. - CRITICAL (1): - Vulnerability: - A critical vulnerability is easily discoverable - by an external actor, exploitable, and results - in the direct ability to execute arbitrary code, - exfiltrate data, and otherwise gain additional - access and privileges to cloud resources and - workloads. Examples include publicly accessible - unprotected user data, public SSH access with - weak or no passwords, etc. - Threat: - Indicates a threat that is able to access, - modify, or delete data or execute unauthorized - code within existing resources. - HIGH (2): - Vulnerability: - A high risk vulnerability can be easily - discovered and exploited in combination with - other vulnerabilities in order to gain direct - access and the ability to execute arbitrary - code, exfiltrate data, and otherwise gain - additional access and privileges to cloud - resources and workloads. An example is a - database with weak or no passwords that is only - accessible internally. This database could - easily be compromised by an actor that had - access to the internal network. - Threat: - Indicates a threat that is able to create new - computational resources in an environment but - not able to access data or execute code in - existing resources. - MEDIUM (3): - Vulnerability: - A medium risk vulnerability could be used by an - actor to gain access to resources or privileges - that enable them to eventually (through multiple - steps or a complex exploit) gain access and the - ability to execute arbitrary code or exfiltrate - data. An example is a service account with - access to more projects than it should have. If - an actor gains access to the service account, - they could potentially use that access to - manipulate a project the service account was not - intended to. - Threat: - Indicates a threat that is able to cause - operational impact but may not access data or - execute unauthorized code. - LOW (4): - Vulnerability: - A low risk vulnerability hampers a security - organization's ability to detect vulnerabilities - or active threats in their deployment, or - prevents the root cause investigation of - security issues. An example is monitoring and - logs being disabled for resource configurations - and access. - Threat: - Indicates a threat that has obtained minimal - access to an environment but is not able to - access data, execute code, or create resources. - """ - SEVERITY_UNSPECIFIED = 0 - CRITICAL = 1 - HIGH = 2 - MEDIUM = 3 - LOW = 4 - - class Mute(proto.Enum): - r"""Mute state a finding can be in. - - Values: - MUTE_UNSPECIFIED (0): - Unspecified. - MUTED (1): - Finding has been muted. - UNMUTED (2): - Finding has been unmuted. - UNDEFINED (4): - Finding has never been muted/unmuted. - """ - MUTE_UNSPECIFIED = 0 - MUTED = 1 - UNMUTED = 2 - UNDEFINED = 4 - - class FindingClass(proto.Enum): - r"""Represents what kind of Finding it is. - - Values: - FINDING_CLASS_UNSPECIFIED (0): - Unspecified finding class. - THREAT (1): - Describes unwanted or malicious activity. - VULNERABILITY (2): - Describes a potential weakness in software - that increases risk to Confidentiality & - Integrity & Availability. - MISCONFIGURATION (3): - Describes a potential weakness in cloud - resource/asset configuration that increases - risk. - OBSERVATION (4): - Describes a security observation that is for - informational purposes. - SCC_ERROR (5): - Describes an error that prevents some SCC - functionality. - """ - FINDING_CLASS_UNSPECIFIED = 0 - THREAT = 1 - VULNERABILITY = 2 - MISCONFIGURATION = 3 - OBSERVATION = 4 - SCC_ERROR = 5 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - severity: Severity = proto.Field( - proto.ENUM, - number=12, - enum=Severity, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - mute: Mute = proto.Field( - proto.ENUM, - number=15, - enum=Mute, - ) - finding_class: FindingClass = proto.Field( - proto.ENUM, - number=17, - enum=FindingClass, - ) - indicator: gcs_indicator.Indicator = proto.Field( - proto.MESSAGE, - number=18, - message=gcs_indicator.Indicator, - ) - vulnerability: gcs_vulnerability.Vulnerability = proto.Field( - proto.MESSAGE, - number=20, - message=gcs_vulnerability.Vulnerability, - ) - mute_update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=21, - message=timestamp_pb2.Timestamp, - ) - external_systems: MutableMapping[str, external_system.ExternalSystem] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=22, - message=external_system.ExternalSystem, - ) - mitre_attack: gcs_mitre_attack.MitreAttack = proto.Field( - proto.MESSAGE, - number=25, - message=gcs_mitre_attack.MitreAttack, - ) - access: gcs_access.Access = proto.Field( - proto.MESSAGE, - number=26, - message=gcs_access.Access, - ) - connections: MutableSequence[connection.Connection] = proto.RepeatedField( - proto.MESSAGE, - number=31, - message=connection.Connection, - ) - mute_initiator: str = proto.Field( - proto.STRING, - number=28, - ) - processes: MutableSequence[process.Process] = proto.RepeatedField( - proto.MESSAGE, - number=30, - message=process.Process, - ) - contacts: MutableMapping[str, contact_details.ContactDetails] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=33, - message=contact_details.ContactDetails, - ) - compliances: MutableSequence[compliance.Compliance] = proto.RepeatedField( - proto.MESSAGE, - number=34, - message=compliance.Compliance, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=36, - ) - description: str = proto.Field( - proto.STRING, - number=37, - ) - exfiltration: gcs_exfiltration.Exfiltration = proto.Field( - proto.MESSAGE, - number=38, - message=gcs_exfiltration.Exfiltration, - ) - iam_bindings: MutableSequence[iam_binding.IamBinding] = proto.RepeatedField( - proto.MESSAGE, - number=39, - message=iam_binding.IamBinding, - ) - next_steps: str = proto.Field( - proto.STRING, - number=40, - ) - module_name: str = proto.Field( - proto.STRING, - number=41, - ) - containers: MutableSequence[container.Container] = proto.RepeatedField( - proto.MESSAGE, - number=42, - message=container.Container, - ) - kubernetes: gcs_kubernetes.Kubernetes = proto.Field( - proto.MESSAGE, - number=43, - message=gcs_kubernetes.Kubernetes, - ) - database: gcs_database.Database = proto.Field( - proto.MESSAGE, - number=44, - message=gcs_database.Database, - ) - files: MutableSequence[file.File] = proto.RepeatedField( - proto.MESSAGE, - number=46, - message=file.File, - ) - kernel_rootkit: gcs_kernel_rootkit.KernelRootkit = proto.Field( - proto.MESSAGE, - number=50, - message=gcs_kernel_rootkit.KernelRootkit, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py deleted file mode 100644 index 06616e56..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Folder', - }, -) - - -class Folder(proto.Message): - r"""Message that contains the resource name and display name of a - folder resource. - - Attributes: - resource_folder (str): - Full resource name of this folder. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_folder_display_name (str): - The user defined display name for this - folder. - """ - - resource_folder: str = proto.Field( - proto.STRING, - number=1, - ) - resource_folder_display_name: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py deleted file mode 100644 index e03e9044..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'IamBinding', - }, -) - - -class IamBinding(proto.Message): - r"""Represents a particular IAM binding, which captures a - member's role addition, removal, or state. - - Attributes: - action (google.cloud.securitycenter_v1.types.IamBinding.Action): - The action that was performed on a Binding. - role (str): - Role that is assigned to "members". - For example, "roles/viewer", "roles/editor", or - "roles/owner". - member (str): - A single identity requesting access for a - Cloud Platform resource, e.g. "foo@google.com". - """ - class Action(proto.Enum): - r"""The type of action performed on a Binding in a policy. - - Values: - ACTION_UNSPECIFIED (0): - Unspecified. - ADD (1): - Addition of a Binding. - REMOVE (2): - Removal of a Binding. - """ - ACTION_UNSPECIFIED = 0 - ADD = 1 - REMOVE = 2 - - action: Action = proto.Field( - proto.ENUM, - number=1, - enum=Action, - ) - role: str = proto.Field( - proto.STRING, - number=2, - ) - member: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py deleted file mode 100644 index 13bfe863..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Indicator', - }, -) - - -class Indicator(proto.Message): - r"""Represents what's commonly known as an *indicator of compromise* - (IoC) in computer forensics. This is an artifact observed on a - network or in an operating system that, with high confidence, - indicates a computer intrusion. For more information, see `Indicator - of - compromise `__. - - Attributes: - ip_addresses (MutableSequence[str]): - The list of IP addresses that are associated - with the finding. - domains (MutableSequence[str]): - List of domains associated to the Finding. - signatures (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature]): - The list of matched signatures indicating - that the given process is present in the - environment. - uris (MutableSequence[str]): - The list of URIs associated to the Findings. - """ - - class ProcessSignature(proto.Message): - r"""Indicates what signature matched this process. - - This message has `oneof`_ fields (mutually exclusive fields). - For each oneof, at most one member field can be set at the same time. - Setting any member of the oneof automatically clears all other - members. - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - memory_hash_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature): - Signature indicating that a binary family was - matched. - - This field is a member of `oneof`_ ``signature``. - yara_rule_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.YaraRuleSignature): - Signature indicating that a YARA rule was - matched. - - This field is a member of `oneof`_ ``signature``. - """ - - class MemoryHashSignature(proto.Message): - r"""A signature corresponding to memory page hashes. - - Attributes: - binary_family (str): - The binary family. - detections (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature.Detection]): - The list of memory hash detections - contributing to the binary family match. - """ - - class Detection(proto.Message): - r"""Memory hash detection contributing to the binary family - match. - - Attributes: - binary (str): - The name of the binary associated with the - memory hash signature detection. - percent_pages_matched (float): - The percentage of memory page hashes in the - signature that were matched. - """ - - binary: str = proto.Field( - proto.STRING, - number=2, - ) - percent_pages_matched: float = proto.Field( - proto.DOUBLE, - number=3, - ) - - binary_family: str = proto.Field( - proto.STRING, - number=1, - ) - detections: MutableSequence['Indicator.ProcessSignature.MemoryHashSignature.Detection'] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message='Indicator.ProcessSignature.MemoryHashSignature.Detection', - ) - - class YaraRuleSignature(proto.Message): - r"""A signature corresponding to a YARA rule. - - Attributes: - yara_rule (str): - The name of the YARA rule. - """ - - yara_rule: str = proto.Field( - proto.STRING, - number=5, - ) - - memory_hash_signature: 'Indicator.ProcessSignature.MemoryHashSignature' = proto.Field( - proto.MESSAGE, - number=6, - oneof='signature', - message='Indicator.ProcessSignature.MemoryHashSignature', - ) - yara_rule_signature: 'Indicator.ProcessSignature.YaraRuleSignature' = proto.Field( - proto.MESSAGE, - number=7, - oneof='signature', - message='Indicator.ProcessSignature.YaraRuleSignature', - ) - - ip_addresses: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - domains: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - signatures: MutableSequence[ProcessSignature] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=ProcessSignature, - ) - uris: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=4, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py deleted file mode 100644 index 1d8bd124..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'KernelRootkit', - }, -) - - -class KernelRootkit(proto.Message): - r"""Kernel mode rootkit signatures. - - Attributes: - name (str): - Rootkit name when available. - unexpected_code_modification (bool): - True when unexpected modifications of kernel - code memory are present. - unexpected_read_only_data_modification (bool): - True when unexpected modifications of kernel - read-only data memory are present. - unexpected_ftrace_handler (bool): - True when ``ftrace`` points are present with callbacks - pointing to regions that are not in the expected kernel or - module code range. - unexpected_kprobe_handler (bool): - True when ``kprobe`` points are present with callbacks - pointing to regions that are not in the expected kernel or - module code range. - unexpected_kernel_code_pages (bool): - True when kernel code pages that are not in - the expected kernel or module code regions are - present. - unexpected_system_call_handler (bool): - True when system call handlers that are are - not in the expected kernel or module code - regions are present. - unexpected_interrupt_handler (bool): - True when interrupt handlers that are are not - in the expected kernel or module code regions - are present. - unexpected_processes_in_runqueue (bool): - True when unexpected processes in the - scheduler run queue are present. Such processes - are in the run queue, but not in the process - task list. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - unexpected_code_modification: bool = proto.Field( - proto.BOOL, - number=2, - ) - unexpected_read_only_data_modification: bool = proto.Field( - proto.BOOL, - number=3, - ) - unexpected_ftrace_handler: bool = proto.Field( - proto.BOOL, - number=4, - ) - unexpected_kprobe_handler: bool = proto.Field( - proto.BOOL, - number=5, - ) - unexpected_kernel_code_pages: bool = proto.Field( - proto.BOOL, - number=6, - ) - unexpected_system_call_handler: bool = proto.Field( - proto.BOOL, - number=7, - ) - unexpected_interrupt_handler: bool = proto.Field( - proto.BOOL, - number=8, - ) - unexpected_processes_in_runqueue: bool = proto.Field( - proto.BOOL, - number=9, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py deleted file mode 100644 index 98071521..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py +++ /dev/null @@ -1,338 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import label - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Kubernetes', - }, -) - - -class Kubernetes(proto.Message): - r"""Kubernetes-related attributes. - - Attributes: - pods (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Pod]): - Kubernetes Pods associated with the finding. - This field will contain Pod records for each - container that is owned by a Pod. - nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): - Provides Kubernetes Node information. - node_pools (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.NodePool]): - GKE Node Pools associated with the finding. - This field will contain NodePool information for - each Node, when it is available. - roles (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Role]): - Provides Kubernetes role information for - findings that involve Roles or ClusterRoles. - bindings (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Binding]): - Provides Kubernetes role binding information - for findings that involve RoleBindings or - ClusterRoleBindings. - access_reviews (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.AccessReview]): - Provides information on any Kubernetes access - reviews (i.e. privilege checks) relevant to the - finding. - """ - - class Pod(proto.Message): - r"""Kubernetes Pod. - - Attributes: - ns (str): - Kubernetes Pod namespace. - name (str): - Kubernetes Pod name. - labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): - Pod labels. For Kubernetes containers, these - are applied to the container. - containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): - Pod containers associated with this finding, - if any. - """ - - ns: str = proto.Field( - proto.STRING, - number=1, - ) - name: str = proto.Field( - proto.STRING, - number=2, - ) - labels: MutableSequence[label.Label] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=label.Label, - ) - containers: MutableSequence[container.Container] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=container.Container, - ) - - class Node(proto.Message): - r"""Kubernetes Nodes associated with the finding. - - Attributes: - name (str): - Full Resource name of the Compute Engine VM - running the cluster node. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - class NodePool(proto.Message): - r"""Provides GKE Node Pool information. - - Attributes: - name (str): - Kubernetes Node pool name. - nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): - Nodes associated with the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - nodes: MutableSequence['Kubernetes.Node'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='Kubernetes.Node', - ) - - class Role(proto.Message): - r"""Kubernetes Role or ClusterRole. - - Attributes: - kind (google.cloud.securitycenter_v1.types.Kubernetes.Role.Kind): - Role type. - ns (str): - Role namespace. - name (str): - Role name. - """ - class Kind(proto.Enum): - r"""Types of Kubernetes roles. - - Values: - KIND_UNSPECIFIED (0): - Role type is not specified. - ROLE (1): - Kubernetes Role. - CLUSTER_ROLE (2): - Kubernetes ClusterRole. - """ - KIND_UNSPECIFIED = 0 - ROLE = 1 - CLUSTER_ROLE = 2 - - kind: 'Kubernetes.Role.Kind' = proto.Field( - proto.ENUM, - number=1, - enum='Kubernetes.Role.Kind', - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - - class Binding(proto.Message): - r"""Represents a Kubernetes RoleBinding or ClusterRoleBinding. - - Attributes: - ns (str): - Namespace for binding. - name (str): - Name for binding. - role (google.cloud.securitycenter_v1.types.Kubernetes.Role): - The Role or ClusterRole referenced by the - binding. - subjects (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Subject]): - Represents one or more subjects that are - bound to the role. Not always available for - PATCH requests. - """ - - ns: str = proto.Field( - proto.STRING, - number=1, - ) - name: str = proto.Field( - proto.STRING, - number=2, - ) - role: 'Kubernetes.Role' = proto.Field( - proto.MESSAGE, - number=3, - message='Kubernetes.Role', - ) - subjects: MutableSequence['Kubernetes.Subject'] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message='Kubernetes.Subject', - ) - - class Subject(proto.Message): - r"""Represents a Kubernetes Subject. - - Attributes: - kind (google.cloud.securitycenter_v1.types.Kubernetes.Subject.AuthType): - Authentication type for subject. - ns (str): - Namespace for subject. - name (str): - Name for subject. - """ - class AuthType(proto.Enum): - r"""Auth types that can be used for Subject's kind field. - - Values: - AUTH_TYPE_UNSPECIFIED (0): - Authentication is not specified. - USER (1): - User with valid certificate. - SERVICEACCOUNT (2): - Users managed by Kubernetes API with - credentials stored as Secrets. - GROUP (3): - Collection of users. - """ - AUTH_TYPE_UNSPECIFIED = 0 - USER = 1 - SERVICEACCOUNT = 2 - GROUP = 3 - - kind: 'Kubernetes.Subject.AuthType' = proto.Field( - proto.ENUM, - number=1, - enum='Kubernetes.Subject.AuthType', - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - - class AccessReview(proto.Message): - r"""Conveys information about a Kubernetes access review (e.g. - kubectl auth can-i ...) that was involved in a finding. - - Attributes: - group (str): - Group is the API Group of the Resource. "*" means all. - ns (str): - Namespace of the action being requested. - Currently, there is no distinction between no - namespace and all namespaces. Both are - represented by "" (empty). - name (str): - Name is the name of the resource being - requested. Empty means all. - resource (str): - Resource is the optional resource type requested. "*" means - all. - subresource (str): - Subresource is the optional subresource type. - verb (str): - Verb is a Kubernetes resource API verb, like: get, list, - watch, create, update, delete, proxy. "*" means all. - version (str): - Version is the API Version of the Resource. "*" means all. - """ - - group: str = proto.Field( - proto.STRING, - number=1, - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - resource: str = proto.Field( - proto.STRING, - number=4, - ) - subresource: str = proto.Field( - proto.STRING, - number=5, - ) - verb: str = proto.Field( - proto.STRING, - number=6, - ) - version: str = proto.Field( - proto.STRING, - number=7, - ) - - pods: MutableSequence[Pod] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=Pod, - ) - nodes: MutableSequence[Node] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message=Node, - ) - node_pools: MutableSequence[NodePool] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=NodePool, - ) - roles: MutableSequence[Role] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=Role, - ) - bindings: MutableSequence[Binding] = proto.RepeatedField( - proto.MESSAGE, - number=5, - message=Binding, - ) - access_reviews: MutableSequence[AccessReview] = proto.RepeatedField( - proto.MESSAGE, - number=6, - message=AccessReview, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py deleted file mode 100644 index e2ef5ee3..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Label', - }, -) - - -class Label(proto.Message): - r"""Label represents a generic name=value label. Label has - separate name and value fields to support filtering with - contains(). - - Attributes: - name (str): - Label name. - value (str): - Label value. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - value: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py deleted file mode 100644 index 9b1bee93..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py +++ /dev/null @@ -1,252 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'MitreAttack', - }, -) - - -class MitreAttack(proto.Message): - r"""MITRE ATT&CK tactics and techniques related to this finding. - See: https://attack.mitre.org - - Attributes: - primary_tactic (google.cloud.securitycenter_v1.types.MitreAttack.Tactic): - The MITRE ATT&CK tactic most closely - represented by this finding, if any. - primary_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): - The MITRE ATT&CK technique most closely represented by this - finding, if any. primary_techniques is a repeated field - because there are multiple levels of MITRE ATT&CK - techniques. If the technique most closely represented by - this finding is a sub-technique (e.g. - ``SCANNING_IP_BLOCKS``), both the sub-technique and its - parent technique(s) will be listed (e.g. - ``SCANNING_IP_BLOCKS``, ``ACTIVE_SCANNING``). - additional_tactics (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Tactic]): - Additional MITRE ATT&CK tactics related to - this finding, if any. - additional_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): - Additional MITRE ATT&CK techniques related to - this finding, if any, along with any of their - respective parent techniques. - version (str): - The MITRE ATT&CK version referenced by the - above fields. E.g. "8". - """ - class Tactic(proto.Enum): - r"""MITRE ATT&CK tactics that can be referenced by SCC findings. - See: https://attack.mitre.org/tactics/enterprise/ - - Values: - TACTIC_UNSPECIFIED (0): - Unspecified value. - RECONNAISSANCE (1): - TA0043 - RESOURCE_DEVELOPMENT (2): - TA0042 - INITIAL_ACCESS (5): - TA0001 - EXECUTION (3): - TA0002 - PERSISTENCE (6): - TA0003 - PRIVILEGE_ESCALATION (8): - TA0004 - DEFENSE_EVASION (7): - TA0005 - CREDENTIAL_ACCESS (9): - TA0006 - DISCOVERY (10): - TA0007 - LATERAL_MOVEMENT (11): - TA0008 - COLLECTION (12): - TA0009 - COMMAND_AND_CONTROL (4): - TA0011 - EXFILTRATION (13): - TA0010 - IMPACT (14): - TA0040 - """ - TACTIC_UNSPECIFIED = 0 - RECONNAISSANCE = 1 - RESOURCE_DEVELOPMENT = 2 - INITIAL_ACCESS = 5 - EXECUTION = 3 - PERSISTENCE = 6 - PRIVILEGE_ESCALATION = 8 - DEFENSE_EVASION = 7 - CREDENTIAL_ACCESS = 9 - DISCOVERY = 10 - LATERAL_MOVEMENT = 11 - COLLECTION = 12 - COMMAND_AND_CONTROL = 4 - EXFILTRATION = 13 - IMPACT = 14 - - class Technique(proto.Enum): - r"""MITRE ATT&CK techniques that can be referenced by SCC - findings. See: https://attack.mitre.org/techniques/enterprise/ - - Values: - TECHNIQUE_UNSPECIFIED (0): - Unspecified value. - ACTIVE_SCANNING (1): - T1595 - SCANNING_IP_BLOCKS (2): - T1595.001 - INGRESS_TOOL_TRANSFER (3): - T1105 - NATIVE_API (4): - T1106 - SHARED_MODULES (5): - T1129 - COMMAND_AND_SCRIPTING_INTERPRETER (6): - T1059 - UNIX_SHELL (7): - T1059.004 - RESOURCE_HIJACKING (8): - T1496 - PROXY (9): - T1090 - EXTERNAL_PROXY (10): - T1090.002 - MULTI_HOP_PROXY (11): - T1090.003 - DYNAMIC_RESOLUTION (12): - T1568 - UNSECURED_CREDENTIALS (13): - T1552 - VALID_ACCOUNTS (14): - T1078 - LOCAL_ACCOUNTS (15): - T1078.003 - CLOUD_ACCOUNTS (16): - T1078.004 - NETWORK_DENIAL_OF_SERVICE (17): - T1498 - PERMISSION_GROUPS_DISCOVERY (18): - T1069 - CLOUD_GROUPS (19): - T1069.003 - EXFILTRATION_OVER_WEB_SERVICE (20): - T1567 - EXFILTRATION_TO_CLOUD_STORAGE (21): - T1567.002 - ACCOUNT_MANIPULATION (22): - T1098 - SSH_AUTHORIZED_KEYS (23): - T1098.004 - CREATE_OR_MODIFY_SYSTEM_PROCESS (24): - T1543 - STEAL_WEB_SESSION_COOKIE (25): - T1539 - MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE (26): - T1578 - EXPLOIT_PUBLIC_FACING_APPLICATION (27): - T1190 - MODIFY_AUTHENTICATION_PROCESS (28): - T1556 - DATA_DESTRUCTION (29): - T1485 - DOMAIN_POLICY_MODIFICATION (30): - T1484 - IMPAIR_DEFENSES (31): - T1562 - NETWORK_SERVICE_DISCOVERY (32): - T1046 - ACCESS_TOKEN_MANIPULATION (33): - T1134 - ABUSE_ELEVATION_CONTROL_MECHANISM (34): - T1548 - DEFAULT_ACCOUNTS (35): - T1078.001 - """ - TECHNIQUE_UNSPECIFIED = 0 - ACTIVE_SCANNING = 1 - SCANNING_IP_BLOCKS = 2 - INGRESS_TOOL_TRANSFER = 3 - NATIVE_API = 4 - SHARED_MODULES = 5 - COMMAND_AND_SCRIPTING_INTERPRETER = 6 - UNIX_SHELL = 7 - RESOURCE_HIJACKING = 8 - PROXY = 9 - EXTERNAL_PROXY = 10 - MULTI_HOP_PROXY = 11 - DYNAMIC_RESOLUTION = 12 - UNSECURED_CREDENTIALS = 13 - VALID_ACCOUNTS = 14 - LOCAL_ACCOUNTS = 15 - CLOUD_ACCOUNTS = 16 - NETWORK_DENIAL_OF_SERVICE = 17 - PERMISSION_GROUPS_DISCOVERY = 18 - CLOUD_GROUPS = 19 - EXFILTRATION_OVER_WEB_SERVICE = 20 - EXFILTRATION_TO_CLOUD_STORAGE = 21 - ACCOUNT_MANIPULATION = 22 - SSH_AUTHORIZED_KEYS = 23 - CREATE_OR_MODIFY_SYSTEM_PROCESS = 24 - STEAL_WEB_SESSION_COOKIE = 25 - MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE = 26 - EXPLOIT_PUBLIC_FACING_APPLICATION = 27 - MODIFY_AUTHENTICATION_PROCESS = 28 - DATA_DESTRUCTION = 29 - DOMAIN_POLICY_MODIFICATION = 30 - IMPAIR_DEFENSES = 31 - NETWORK_SERVICE_DISCOVERY = 32 - ACCESS_TOKEN_MANIPULATION = 33 - ABUSE_ELEVATION_CONTROL_MECHANISM = 34 - DEFAULT_ACCOUNTS = 35 - - primary_tactic: Tactic = proto.Field( - proto.ENUM, - number=1, - enum=Tactic, - ) - primary_techniques: MutableSequence[Technique] = proto.RepeatedField( - proto.ENUM, - number=2, - enum=Technique, - ) - additional_tactics: MutableSequence[Tactic] = proto.RepeatedField( - proto.ENUM, - number=3, - enum=Tactic, - ) - additional_techniques: MutableSequence[Technique] = proto.RepeatedField( - proto.ENUM, - number=4, - enum=Technique, - ) - version: str = proto.Field( - proto.STRING, - number=5, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py deleted file mode 100644 index b3ec0987..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'MuteConfig', - }, -) - - -class MuteConfig(proto.Message): - r"""A mute config is a Cloud SCC resource that contains the - configuration to mute create/update events of findings. - - Attributes: - name (str): - This field will be ignored if provided on config creation. - Format - "organizations/{organization}/muteConfigs/{mute_config}" - "folders/{folder}/muteConfigs/{mute_config}" - "projects/{project}/muteConfigs/{mute_config}". - display_name (str): - The human readable name to be displayed for - the mute config. - description (str): - A description of the mute config. - filter (str): - Required. An expression that defines the filter to apply - across create/update events of findings. While creating a - filter string, be mindful of the scope in which the mute - configuration is being created. E.g., If a filter contains - project = X but is created under the project = Y scope, it - might not match any findings. - - The following field and operator combinations are supported: - - - severity: ``=``, ``:`` - - category: ``=``, ``:`` - - resource.name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.folders.resource_folder: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - - finding_class: ``=``, ``:`` - - indicator.ip_addresses: ``=``, ``:`` - - indicator.domains: ``=``, ``:`` - create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the mute - config was created. This field is set by the - server and will be ignored if provided on config - creation. - update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time at which - the mute config was updated. This field is set - by the server and will be ignored if provided on - config creation or update. - most_recent_editor (str): - Output only. Email address of the user who - last edited the mute config. This field is set - by the server and will be ignored if provided on - config creation or update. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - filter: str = proto.Field( - proto.STRING, - number=4, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=6, - message=timestamp_pb2.Timestamp, - ) - most_recent_editor: str = proto.Field( - proto.STRING, - number=7, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py deleted file mode 100644 index c6061740..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'NotificationConfig', - }, -) - - -class NotificationConfig(proto.Message): - r"""Cloud Security Command Center (Cloud SCC) notification - configs. - A notification config is a Cloud SCC resource that contains the - configuration to send notifications for create/update events of - findings, assets and etc. - - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - name (str): - The relative resource name of this notification config. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/notificationConfigs/notify_public_bucket", - "folders/{folder_id}/notificationConfigs/notify_public_bucket", - or - "projects/{project_id}/notificationConfigs/notify_public_bucket". - description (str): - The description of the notification config - (max of 1024 characters). - pubsub_topic (str): - The Pub/Sub topic to send notifications to. Its format is - "projects/[project_id]/topics/[topic]". - service_account (str): - Output only. The service account that needs - "pubsub.topics.publish" permission to publish to - the Pub/Sub topic. - streaming_config (google.cloud.securitycenter_v1.types.NotificationConfig.StreamingConfig): - The config for triggering streaming-based - notifications. - - This field is a member of `oneof`_ ``notify_config``. - """ - - class StreamingConfig(proto.Message): - r"""The config for streaming-based notifications, which send each - event as soon as it is detected. - - Attributes: - filter (str): - Expression that defines the filter to apply across - create/update events of assets or findings as specified by - the event type. The expression is a list of zero or more - restrictions combined via logical operators ``AND`` and - ``OR``. Parentheses are supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - """ - - filter: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - pubsub_topic: str = proto.Field( - proto.STRING, - number=3, - ) - service_account: str = proto.Field( - proto.STRING, - number=4, - ) - streaming_config: StreamingConfig = proto.Field( - proto.MESSAGE, - number=5, - oneof='notify_config', - message=StreamingConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py deleted file mode 100644 index 79e26c0f..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import resource as gcs_resource - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'NotificationMessage', - }, -) - - -class NotificationMessage(proto.Message): - r"""Cloud SCC's Notification - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - notification_config_name (str): - Name of the notification config that - generated current notification. - finding (google.cloud.securitycenter_v1.types.Finding): - If it's a Finding based notification config, - this field will be populated. - - This field is a member of `oneof`_ ``event``. - resource (google.cloud.securitycenter_v1.types.Resource): - The Cloud resource tied to this - notification's Finding. - """ - - notification_config_name: str = proto.Field( - proto.STRING, - number=1, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=2, - oneof='event', - message=gcs_finding.Finding, - ) - resource: gcs_resource.Resource = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_resource.Resource, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py deleted file mode 100644 index 54c80c60..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - folder_ids (MutableSequence[str]): - The folder ids to use for filtering asset - discovery. It consists of only digits, e.g., - 756619654966. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - folder_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py deleted file mode 100644 index 3cd886e5..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import file - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Process', - 'EnvironmentVariable', - }, -) - - -class Process(proto.Message): - r"""Represents an operating system process. - - Attributes: - name (str): - The process name visible in utilities like ``top`` and - ``ps``; it can be accessed via ``/proc/[pid]/comm`` and - changed with ``prctl(PR_SET_NAME)``. - binary (google.cloud.securitycenter_v1.types.File): - File information for the process executable. - libraries (MutableSequence[google.cloud.securitycenter_v1.types.File]): - File information for libraries loaded by the - process. - script (google.cloud.securitycenter_v1.types.File): - When the process represents the invocation of a script, - ``binary`` provides information about the interpreter while - ``script`` provides information about the script file - provided to the interpreter. - args (MutableSequence[str]): - Process arguments as JSON encoded strings. - arguments_truncated (bool): - True if ``args`` is incomplete. - env_variables (MutableSequence[google.cloud.securitycenter_v1.types.EnvironmentVariable]): - Process environment variables. - env_variables_truncated (bool): - True if ``env_variables`` is incomplete. - pid (int): - The process id. - parent_pid (int): - The parent process id. - """ - - name: str = proto.Field( - proto.STRING, - number=12, - ) - binary: file.File = proto.Field( - proto.MESSAGE, - number=3, - message=file.File, - ) - libraries: MutableSequence[file.File] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=file.File, - ) - script: file.File = proto.Field( - proto.MESSAGE, - number=5, - message=file.File, - ) - args: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=6, - ) - arguments_truncated: bool = proto.Field( - proto.BOOL, - number=7, - ) - env_variables: MutableSequence['EnvironmentVariable'] = proto.RepeatedField( - proto.MESSAGE, - number=8, - message='EnvironmentVariable', - ) - env_variables_truncated: bool = proto.Field( - proto.BOOL, - number=9, - ) - pid: int = proto.Field( - proto.INT64, - number=10, - ) - parent_pid: int = proto.Field( - proto.INT64, - number=11, - ) - - -class EnvironmentVariable(proto.Message): - r"""EnvironmentVariable is a name-value pair to store environment - variables for Process. - - Attributes: - name (str): - Environment variable name as a JSON encoded - string. - val (str): - Environment variable value as a JSON encoded - string. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - val: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py deleted file mode 100644 index 5c6cfad9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import folder - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Resource', - }, -) - - -class Resource(proto.Message): - r"""Information related to the Google Cloud resource. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - display_name (str): - The human readable name of the resource. - type_ (str): - The full resource type of the resource. - project (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The project ID that the resource belongs to. - parent (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Output only. Contains a Folder message for - each folder in the assets ancestry. The first - folder is the deepest nested folder, and the - last folder is the folder directly under the - Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=8, - ) - type_: str = proto.Field( - proto.STRING, - number=6, - ) - project: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py deleted file mode 100644 index 11a7f0e2..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py deleted file mode 100644 index 4c099a33..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - canonical_name (str): - The canonical name of the marks. Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "folders/{folder_id}/assets/{asset_id}/securityMarks" - "projects/{project_number}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py deleted file mode 100644 index 03153786..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py +++ /dev/null @@ -1,2456 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import asset as gcs_asset -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import folder -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'RunAssetDiscoveryRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - 'CreateBigQueryExportRequest', - 'UpdateBigQueryExportRequest', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'DeleteBigQueryExportRequest', - }, -) - - -class BulkMuteFindingsRequest(proto.Message): - r"""Request message for bulk findings update. - Note: - 1. If multiple bulk update requests match the same resource, the - order in which they get executed is not defined. - 2. Once a bulk operation is started, there is no way to stop it. - - Attributes: - parent (str): - Required. The parent, at which bulk action needs to be - applied. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - filter (str): - Expression that identifies findings that should be updated. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - mute_annotation (str): - This can be a mute configuration name or any - identifier for mute/unmute of findings based on - the filter. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - mute_annotation: str = proto.Field( - proto.STRING, - number=3, - ) - - -class BulkMuteFindingsResponse(proto.Message): - r"""The response to a BulkMute request. Contains the LRO - information. - - """ - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - alphanumeric and less than or equal to 32 - characters and greater than 0 characters in - length. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateMuteConfigRequest(proto.Message): - r"""Request message for creating a mute config. - - Attributes: - parent (str): - Required. Resource name of the new mute configs's parent. - Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being created. - mute_config_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must consist - of lower case letters, numbers, and hyphen, with - the first character a letter, the last a letter - or a number, and a 63 character maximum. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - mute_config: gcs_mute_config.MuteConfig = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_mute_config.MuteConfig, - ) - mute_config_id: str = proto.Field( - proto.STRING, - number=3, - ) - - -class CreateNotificationConfigRequest(proto.Message): - r"""Request message for creating a notification config. - - Attributes: - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - config_id (str): - Required. - Unique identifier provided by the client within - the parent scope. It must be between 1 and 128 - characters and contain alphanumeric characters, - underscores, or hyphens only. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config being - created. The name and the service account will - be ignored as they are both output only fields - on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - config_id: str = proto.Field( - proto.STRING, - number=2, - ) - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_notification_config.NotificationConfig, - ) - - -class CreateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for creating security health analytics custom - modules. - - Attributes: - parent (str): - Required. Resource name of the new custom - module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. SecurityHealthAnalytics custom - module to create. The provided name is ignored - and reset with provided parent information and - server-generated ID. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class DeleteMuteConfigRequest(proto.Message): - r"""Request message for deleting a mute config. - - Attributes: - name (str): - Required. Name of the mute config to delete. Its format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class DeleteNotificationConfigRequest(proto.Message): - r"""Request message for deleting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", or - "projects/[project_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class DeleteSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for deleting security health analytics custom - modules. - - Attributes: - name (str): - Required. Name of the custom module to - delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetBigQueryExportRequest(proto.Message): - r"""Request message for retrieving a BigQuery export. - - Attributes: - name (str): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetMuteConfigRequest(proto.Message): - r"""Request message for retrieving a mute config. - - Attributes: - name (str): - Required. Name of the mute config to retrieve. Its format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetNotificationConfigRequest(proto.Message): - r"""Request message for getting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to get. Its format - is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", or - "projects/[project_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for getting effective security health - analytics custom modules. - - Attributes: - name (str): - Required. Name of the effective custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for getting security health analytics custom - modules. - - Attributes: - name (str): - Required. Name of the custom module to get. - Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. The name of the parent to group the assets by. Its - format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_project_display_name - - security_center_properties.resource_type - - security_center_properties.resource_parent - - security_center_properties.resource_parent_display_name - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - - security_center_properties.resource_project_display_name - - security_center_properties.resource_parent_display_name - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" property is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - severity: ``=``, ``:`` - - - workflow_state: ``=``, ``:`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based - on a property existing: - ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - - - resource: - - - resource.name: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state_change``). The string value - should follow SQL syntax: comma separated list of fields. - For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration is - set: - - - state_change - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing descendant security health - analytics custom modules. - - Attributes: - parent (str): - Required. Name of parent to list descendant - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing descendant security health - analytics custom modules. - - Attributes: - security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): - Custom modules belonging to the requested - parent and its descendants. - next_page_token (str): - If not empty, indicates that there may be - more custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListMuteConfigsRequest(proto.Message): - r"""Request message for listing mute configs at a given scope - e.g. organization, folder or project. - - Attributes: - parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - page_size (int): - The maximum number of configs to return. The - service may return fewer than this value. - If unspecified, at most 10 configs will be - returned. The maximum value is 1000; values - above 1000 will be coerced to 1000. - page_token (str): - A page token, received from a previous ``ListMuteConfigs`` - call. Provide this to retrieve the subsequent page. - - When paginating, all other parameters provided to - ``ListMuteConfigs`` must match the call that provided the - page token. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListMuteConfigsResponse(proto.Message): - r"""Response message for listing mute configs. - - Attributes: - mute_configs (MutableSequence[google.cloud.securitycenter_v1.types.MuteConfig]): - The mute configs from the specified parent. - next_page_token (str): - A token, which can be sent as ``page_token`` to retrieve the - next page. If this field is omitted, there are no subsequent - pages. - """ - - @property - def raw_page(self): - return self - - mute_configs: MutableSequence[gcs_mute_config.MuteConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_mute_config.MuteConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListNotificationConfigsRequest(proto.Message): - r"""Request message for listing notification configs. - - Attributes: - parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", "folders/[folder_id]", or - "projects/[project_id]". - page_token (str): - The value returned by the last - ``ListNotificationConfigsResponse``; indicates that this is - a continuation of a prior ``ListNotificationConfigs`` call, - and that the system should return the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=3, - ) - - -class ListNotificationConfigsResponse(proto.Message): - r"""Response message for listing notification configs. - - Attributes: - notification_configs (MutableSequence[google.cloud.securitycenter_v1.types.NotificationConfig]): - Notification configs belonging to the - requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing effective security health - analytics custom modules. - - Attributes: - parent (str): - Required. Name of parent to list effective - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing effective security health - analytics custom modules. - - Attributes: - effective_security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule]): - Effective custom modules belonging to the - requested parent. - next_page_token (str): - If not empty, indicates that there may be - more effective custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - effective_security_health_analytics_custom_modules: MutableSequence[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing security health analytics custom - modules. - - Attributes: - parent (str): - Required. Name of parent to list custom - modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing security health analytics custom - modules. - - Attributes: - security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): - Custom modules belonging to the requested - parent. - next_page_token (str): - If not empty, indicates that there may be - more custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. The name of the parent resource that contains the - assets. The value that you can specify on parent depends on - the method in which you specify parent. You can specify one - of the following values: "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following are the allowed field and operator - combinations: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - - The following fields are supported: name update_time - resource_properties security_marks.marks - security_center_properties.resource_name - security_center_properties.resource_display_name - security_center_properties.resource_parent - security_center_properties.resource_parent_display_name - security_center_properties.resource_project - security_center_properties.resource_project_display_name - security_center_properties.resource_type - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetsResult's - "state_change" attribute is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the ListAssetsResult - fields to be listed in the response. - An empty field mask will list all fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1.types.Asset): - Asset matching the search request. - state_change (google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult.StateChange): - State change of the asset between the points - in time. - """ - class StateChange(proto.Enum): - r"""The change in state of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state change will be: - UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - ADDED (1): - Asset was added between the points in time. - REMOVED (2): - Asset was removed between the points in time. - ACTIVE (3): - Asset was present at both point(s) in time. - """ - UNUSED = 0 - ADDED = 1 - REMOVED = 2 - ACTIVE = 3 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.StateChange', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - severity: ``=``, ``:`` - - - workflow_state: ``=``, ``:`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based - on a property existing: - ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - - - resource: - - - resource.name: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - - resource.folders.resource_folder: ``=``, ``:`` - - resource.display_name: ``=``, ``:`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - - The following fields are supported: name parent state - category resource_name event_time source_properties - security_marks.marks - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListFindingsResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added in any state during - the compare_duration period of time that precedes the - read_time. This is the time between (read_time - - compare_duration) and read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the Finding fields to - be listed in the response. An empty field mask - will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - list_findings_results (MutableSequence[google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - class ListFindingsResult(proto.Message): - r"""Result containing the Finding and its StateChange. - - Attributes: - finding (google.cloud.securitycenter_v1.types.Finding): - Finding matching the search request. - state_change (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.StateChange): - State change of the finding between the - points in time. - resource (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.Resource): - Output only. Resource that is associated with - this finding. - """ - class StateChange(proto.Enum): - r"""The change in state of the finding. - - When querying across two points in time this describes the change in - the finding between the two points: CHANGED, UNCHANGED, ADDED, or - REMOVED. Findings can not be deleted, so REMOVED implies that the - finding at timestamp does not match the filter specified, but it did - at timestamp - compare_duration. If there was no compare_duration - supplied in the request the state change will be: UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - CHANGED (1): - The finding has changed state in some way - between the points in time and existed at both - points. - UNCHANGED (2): - The finding has not changed state between the - points in time and existed at both points. - ADDED (3): - The finding was created between the points in - time. - REMOVED (4): - The finding at timestamp does not match the filter - specified, but it did at timestamp - compare_duration. - """ - UNUSED = 0 - CHANGED = 1 - UNCHANGED = 2 - ADDED = 3 - REMOVED = 4 - - class Resource(proto.Message): - r"""Information related to the Google Cloud resource that is - associated with this finding. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - display_name (str): - The human readable name of the resource. - type_ (str): - The full resource type of the resource. - project_name (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The project ID that the resource belongs to. - parent_name (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=8, - ) - type_: str = proto.Field( - proto.STRING, - number=6, - ) - project_name: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent_name: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListFindingsResponse.ListFindingsResult.StateChange', - ) - resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( - proto.MESSAGE, - number=3, - message='ListFindingsResponse.ListFindingsResult.Resource', - ) - - @property - def raw_page(self): - return self - - list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListFindingsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - state (google.cloud.securitycenter_v1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class SetMuteRequest(proto.Message): - r"""Request message for updating a finding's mute status. - - Attributes: - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Required. The desired state of the Mute. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - mute: gcs_finding.Finding.Mute = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.Mute, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateExternalSystemRequest(proto.Message): - r"""Request message for updating a ExternalSystem resource. - - Attributes: - external_system (google.cloud.securitycenter_v1.types.ExternalSystem): - Required. The external system resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - external system resource. - If empty all mutable fields will be updated. - """ - - external_system: gcs_external_system.ExternalSystem = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_external_system.ExternalSystem, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must be alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing source_properties. - Individual source_properties can be added/updated by using - "source_properties." in the field mask. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateMuteConfigRequest(proto.Message): - r"""Request message for updating a mute config. - - Attributes: - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being updated. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be updated. - """ - - mute_config: gcs_mute_config.MuteConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_mute_config.MuteConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateNotificationConfigRequest(proto.Message): - r"""Request message for updating a notification config. - - Attributes: - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - notification config. - If empty all mutable fields will be updated. - """ - - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - If empty all mutable fields will be updated. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for updating security health analytics custom - modules. - - Attributes: - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. The SecurityHealthAnalytics custom - module to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to update. - """ - - security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - If empty all mutable fields will be updated. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If empty - or set to "marks", all marks will be replaced. Individual - marks can be updated using "marks.". - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. If not set uses current server - time. Updates will be applied to the - SecurityMarks that are active immediately - preceding this time. Must be earlier or equal to - the server time. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class CreateBigQueryExportRequest(proto.Message): - r"""Request message for creating a BigQuery export. - - Attributes: - parent (str): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", "folders/[folder_id]", or - "projects/[project_id]". - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being created. - big_query_export_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must consist - of lower case letters, numbers, and hyphen, with - the first character a letter, the last a letter - or a number, and a 63 character maximum. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - big_query_export: bigquery_export.BigQueryExport = proto.Field( - proto.MESSAGE, - number=2, - message=bigquery_export.BigQueryExport, - ) - big_query_export_id: str = proto.Field( - proto.STRING, - number=3, - ) - - -class UpdateBigQueryExportRequest(proto.Message): - r"""Request message for updating a BigQuery export. - - Attributes: - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being updated. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be updated. - """ - - big_query_export: bigquery_export.BigQueryExport = proto.Field( - proto.MESSAGE, - number=1, - message=bigquery_export.BigQueryExport, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class ListBigQueryExportsRequest(proto.Message): - r"""Request message for listing BigQuery exports at a given scope - e.g. organization, folder or project. - - Attributes: - parent (str): - Required. The parent, which owns the collection of BigQuery - exports. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - page_size (int): - The maximum number of configs to return. The - service may return fewer than this value. - If unspecified, at most 10 configs will be - returned. The maximum value is 1000; values - above 1000 will be coerced to 1000. - page_token (str): - A page token, received from a previous - ``ListBigQueryExports`` call. Provide this to retrieve the - subsequent page. When paginating, all other parameters - provided to ``ListBigQueryExports`` must match the call that - provided the page token. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListBigQueryExportsResponse(proto.Message): - r"""Response message for listing BigQuery exports. - - Attributes: - big_query_exports (MutableSequence[google.cloud.securitycenter_v1.types.BigQueryExport]): - The BigQuery exports from the specified - parent. - next_page_token (str): - A token, which can be sent as ``page_token`` to retrieve the - next page. If this field is omitted, there are no subsequent - pages. - """ - - @property - def raw_page(self): - return self - - big_query_exports: MutableSequence[bigquery_export.BigQueryExport] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=bigquery_export.BigQueryExport, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class DeleteBigQueryExportRequest(proto.Message): - r"""Request message for deleting a BigQuery export. - - Attributes: - name (str): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py deleted file mode 100644 index 3694ecf0..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, and other tools. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and outdated or - insecure libraries.". - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}", - "folders/{folder_id}/sources/{source_id}" or - "projects/{project_number}/sources/{source_id}", depending - on the closest CRM ancestor of the resource associated with - the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py deleted file mode 100644 index 5fcbfab9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py +++ /dev/null @@ -1,353 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Vulnerability', - 'Cve', - 'Reference', - 'Cvssv3', - }, -) - - -class Vulnerability(proto.Message): - r"""Refers to common vulnerability fields e.g. cve, cvss, cwe - etc. - - Attributes: - cve (google.cloud.securitycenter_v1.types.Cve): - CVE stands for Common Vulnerabilities and - Exposures (https://cve.mitre.org/about/) - """ - - cve: 'Cve' = proto.Field( - proto.MESSAGE, - number=1, - message='Cve', - ) - - -class Cve(proto.Message): - r"""CVE stands for Common Vulnerabilities and Exposures. - More information: https://cve.mitre.org - - Attributes: - id (str): - The unique identifier for the vulnerability. - e.g. CVE-2021-34527 - references (MutableSequence[google.cloud.securitycenter_v1.types.Reference]): - Additional information about the CVE. - e.g. - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527 - cvssv3 (google.cloud.securitycenter_v1.types.Cvssv3): - Describe Common Vulnerability Scoring System - specified at - https://www.first.org/cvss/v3.1/specification-document - upstream_fix_available (bool): - Whether upstream fix is available for the - CVE. - """ - - id: str = proto.Field( - proto.STRING, - number=1, - ) - references: MutableSequence['Reference'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='Reference', - ) - cvssv3: 'Cvssv3' = proto.Field( - proto.MESSAGE, - number=3, - message='Cvssv3', - ) - upstream_fix_available: bool = proto.Field( - proto.BOOL, - number=4, - ) - - -class Reference(proto.Message): - r"""Additional Links - - Attributes: - source (str): - Source of the reference e.g. NVD - uri (str): - Uri for the mentioned source e.g. - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527. - """ - - source: str = proto.Field( - proto.STRING, - number=1, - ) - uri: str = proto.Field( - proto.STRING, - number=2, - ) - - -class Cvssv3(proto.Message): - r"""Common Vulnerability Scoring System version 3. - - Attributes: - base_score (float): - The base score is a function of the base - metric scores. - attack_vector (google.cloud.securitycenter_v1.types.Cvssv3.AttackVector): - Base Metrics - Represents the intrinsic characteristics of a - vulnerability that are constant over time and - across user environments. This metric reflects - the context by which vulnerability exploitation - is possible. - attack_complexity (google.cloud.securitycenter_v1.types.Cvssv3.AttackComplexity): - This metric describes the conditions beyond - the attacker's control that must exist in order - to exploit the vulnerability. - privileges_required (google.cloud.securitycenter_v1.types.Cvssv3.PrivilegesRequired): - This metric describes the level of privileges - an attacker must possess before successfully - exploiting the vulnerability. - user_interaction (google.cloud.securitycenter_v1.types.Cvssv3.UserInteraction): - This metric captures the requirement for a - human user, other than the attacker, to - participate in the successful compromise of the - vulnerable component. - scope (google.cloud.securitycenter_v1.types.Cvssv3.Scope): - The Scope metric captures whether a - vulnerability in one vulnerable component - impacts resources in components beyond its - security scope. - confidentiality_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to the - confidentiality of the information resources - managed by a software component due to a - successfully exploited vulnerability. - integrity_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to integrity - of a successfully exploited vulnerability. - availability_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to the - availability of the impacted component resulting - from a successfully exploited vulnerability. - """ - class AttackVector(proto.Enum): - r"""This metric reflects the context by which vulnerability - exploitation is possible. - - Values: - ATTACK_VECTOR_UNSPECIFIED (0): - Invalid value. - ATTACK_VECTOR_NETWORK (1): - The vulnerable component is bound to the - network stack and the set of possible attackers - extends beyond the other options listed below, - up to and including the entire Internet. - ATTACK_VECTOR_ADJACENT (2): - The vulnerable component is bound to the - network stack, but the attack is limited at the - protocol level to a logically adjacent topology. - ATTACK_VECTOR_LOCAL (3): - The vulnerable component is not bound to the - network stack and the attacker's path is via - read/write/execute capabilities. - ATTACK_VECTOR_PHYSICAL (4): - The attack requires the attacker to - physically touch or manipulate the vulnerable - component. - """ - ATTACK_VECTOR_UNSPECIFIED = 0 - ATTACK_VECTOR_NETWORK = 1 - ATTACK_VECTOR_ADJACENT = 2 - ATTACK_VECTOR_LOCAL = 3 - ATTACK_VECTOR_PHYSICAL = 4 - - class AttackComplexity(proto.Enum): - r"""This metric describes the conditions beyond the attacker's - control that must exist in order to exploit the vulnerability. - - Values: - ATTACK_COMPLEXITY_UNSPECIFIED (0): - Invalid value. - ATTACK_COMPLEXITY_LOW (1): - Specialized access conditions or extenuating - circumstances do not exist. An attacker can - expect repeatable success when attacking the - vulnerable component. - ATTACK_COMPLEXITY_HIGH (2): - A successful attack depends on conditions - beyond the attacker's control. That is, a - successful attack cannot be accomplished at - will, but requires the attacker to invest in - some measurable amount of effort in preparation - or execution against the vulnerable component - before a successful attack can be expected. - """ - ATTACK_COMPLEXITY_UNSPECIFIED = 0 - ATTACK_COMPLEXITY_LOW = 1 - ATTACK_COMPLEXITY_HIGH = 2 - - class PrivilegesRequired(proto.Enum): - r"""This metric describes the level of privileges an attacker - must possess before successfully exploiting the vulnerability. - - Values: - PRIVILEGES_REQUIRED_UNSPECIFIED (0): - Invalid value. - PRIVILEGES_REQUIRED_NONE (1): - The attacker is unauthorized prior to attack, - and therefore does not require any access to - settings or files of the vulnerable system to - carry out an attack. - PRIVILEGES_REQUIRED_LOW (2): - The attacker requires privileges that provide - basic user capabilities that could normally - affect only settings and files owned by a user. - Alternatively, an attacker with Low privileges - has the ability to access only non-sensitive - resources. - PRIVILEGES_REQUIRED_HIGH (3): - The attacker requires privileges that provide - significant (e.g., administrative) control over - the vulnerable component allowing access to - component-wide settings and files. - """ - PRIVILEGES_REQUIRED_UNSPECIFIED = 0 - PRIVILEGES_REQUIRED_NONE = 1 - PRIVILEGES_REQUIRED_LOW = 2 - PRIVILEGES_REQUIRED_HIGH = 3 - - class UserInteraction(proto.Enum): - r"""This metric captures the requirement for a human user, other - than the attacker, to participate in the successful compromise - of the vulnerable component. - - Values: - USER_INTERACTION_UNSPECIFIED (0): - Invalid value. - USER_INTERACTION_NONE (1): - The vulnerable system can be exploited - without interaction from any user. - USER_INTERACTION_REQUIRED (2): - Successful exploitation of this vulnerability - requires a user to take some action before the - vulnerability can be exploited. - """ - USER_INTERACTION_UNSPECIFIED = 0 - USER_INTERACTION_NONE = 1 - USER_INTERACTION_REQUIRED = 2 - - class Scope(proto.Enum): - r"""The Scope metric captures whether a vulnerability in one - vulnerable component impacts resources in components beyond its - security scope. - - Values: - SCOPE_UNSPECIFIED (0): - Invalid value. - SCOPE_UNCHANGED (1): - An exploited vulnerability can only affect - resources managed by the same security - authority. - SCOPE_CHANGED (2): - An exploited vulnerability can affect - resources beyond the security scope managed by - the security authority of the vulnerable - component. - """ - SCOPE_UNSPECIFIED = 0 - SCOPE_UNCHANGED = 1 - SCOPE_CHANGED = 2 - - class Impact(proto.Enum): - r"""The Impact metrics capture the effects of a successfully - exploited vulnerability on the component that suffers the worst - outcome that is most directly and predictably associated with - the attack. - - Values: - IMPACT_UNSPECIFIED (0): - Invalid value. - IMPACT_HIGH (1): - High impact. - IMPACT_LOW (2): - Low impact. - IMPACT_NONE (3): - No impact. - """ - IMPACT_UNSPECIFIED = 0 - IMPACT_HIGH = 1 - IMPACT_LOW = 2 - IMPACT_NONE = 3 - - base_score: float = proto.Field( - proto.DOUBLE, - number=1, - ) - attack_vector: AttackVector = proto.Field( - proto.ENUM, - number=5, - enum=AttackVector, - ) - attack_complexity: AttackComplexity = proto.Field( - proto.ENUM, - number=6, - enum=AttackComplexity, - ) - privileges_required: PrivilegesRequired = proto.Field( - proto.ENUM, - number=7, - enum=PrivilegesRequired, - ) - user_interaction: UserInteraction = proto.Field( - proto.ENUM, - number=8, - enum=UserInteraction, - ) - scope: Scope = proto.Field( - proto.ENUM, - number=9, - enum=Scope, - ) - confidentiality_impact: Impact = proto.Field( - proto.ENUM, - number=10, - enum=Impact, - ) - integrity_impact: Impact = proto.Field( - proto.ENUM, - number=11, - enum=Impact, - ) - availability_impact: Impact = proto.Field( - proto.ENUM, - number=12, - enum=Impact, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/mypy.ini b/owl-bot-staging/v1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1/noxfile.py b/owl-bot-staging/v1/noxfile.py deleted file mode 100644 index 5aa9e2cb..00000000 --- a/owl-bot-staging/v1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py deleted file mode 100644 index 9f200964..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for BulkMuteFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py deleted file mode 100644 index 4b401c59..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for BulkMuteFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py deleted file mode 100644 index 6167e9c2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = await client.create_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py deleted file mode 100644 index d56e951b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = client.create_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py deleted file mode 100644 index 23306071..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 28a836e5..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py deleted file mode 100644 index 464d78cb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = await client.create_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py deleted file mode 100644 index 9b9f6bad..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = client.create_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py deleted file mode 100644 index 8df8025a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py deleted file mode 100644 index 21354ca0..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py deleted file mode 100644 index 5ce8609b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py deleted file mode 100644 index eeae4934..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py deleted file mode 100644 index 7c965f30..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - await client.delete_big_query_export(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py deleted file mode 100644 index 7effded9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - client.delete_big_query_export(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py deleted file mode 100644 index 52a13bba..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_mute_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py deleted file mode 100644 index c8970d3b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_mute_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py deleted file mode 100644 index 1d11af7d..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py deleted file mode 100644 index 0607ed23..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py deleted file mode 100644 index 0e4f204f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = await client.get_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py deleted file mode 100644 index f1cdd5cd..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = client.get_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index ce96f40e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 54bd97ea..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py deleted file mode 100644 index 4bb54d33..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py deleted file mode 100644 index efa2d097..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py deleted file mode 100644 index 0d0ae834..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py deleted file mode 100644 index 1e9c80a7..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index 7f9e2924..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index cf81626a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py deleted file mode 100644 index 4108d8e2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py deleted file mode 100644 index 8f8dffe2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py deleted file mode 100644 index e445a285..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 13d1291e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py deleted file mode 100644 index 9577bd52..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py deleted file mode 100644 index 59b3edff..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py deleted file mode 100644 index 5191db34..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 6f2e8d1c..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py deleted file mode 100644 index 5a4a7ce1..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListBigQueryExports -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py deleted file mode 100644 index ffbd3f44..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListBigQueryExports -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py deleted file mode 100644 index c5fc4e47..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py deleted file mode 100644 index b3489d50..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py deleted file mode 100644 index 2071e7b9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListMuteConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py deleted file mode 100644 index ebf57076..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListMuteConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py deleted file mode 100644 index ebce4273..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py deleted file mode 100644 index 8767d848..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py deleted file mode 100644 index cc2376f2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py deleted file mode 100644 index ce9cf9e2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index f46d5c97..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index f532edfb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index d6d59805..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index 9d22cf31..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index 011f3edc..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index 7462b76d..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py deleted file mode 100644 index 0505bcfb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetMute -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetMute_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = await client.set_mute(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetMute_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py deleted file mode 100644 index f3a30dd5..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetMute -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetMute_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = client.set_mute(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetMute_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index d3740be9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index e4d93da8..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py deleted file mode 100644 index bb383531..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = await client.update_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py deleted file mode 100644 index 7d0dbf32..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = client.update_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py deleted file mode 100644 index a3fe2681..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateExternalSystem -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = await client.update_external_system(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py deleted file mode 100644 index 0a4e224f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateExternalSystem -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = client.update_external_system(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py deleted file mode 100644 index d73667f2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py deleted file mode 100644 index d8cf809f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py deleted file mode 100644 index a3c702a0..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = await client.update_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py deleted file mode 100644 index b73b1ad8..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = client.update_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py deleted file mode 100644 index da71a0be..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py deleted file mode 100644 index cef53b79..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index e9b3d66f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index eca45d7b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 81e9554e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index fe2b480c..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py deleted file mode 100644 index 9bc61107..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py deleted file mode 100644 index d65724e9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json b/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json deleted file mode 100644 index ec678e1a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json +++ /dev/null @@ -1,7211 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1", - "version": "v1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.bulk_mute_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "BulkMuteFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "bulk_mute_findings" - }, - "description": "Sample for BulkMuteFindings", - "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.bulk_mute_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "BulkMuteFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "bulk_mute_findings" - }, - "description": "Sample for BulkMuteFindings", - "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "big_query_export_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "create_big_query_export" - }, - "description": "Sample for CreateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_create_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "big_query_export_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "create_big_query_export" - }, - "description": "Sample for CreateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "mute_config_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "create_mute_config" - }, - "description": "Sample for CreateMuteConfig", - "file": "securitycenter_v1_generated_security_center_create_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async", - "segments": [ - { - "end": 56, - "start": 27, - "type": "FULL" - }, - { - "end": 56, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 50, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 53, - "start": 51, - "type": "REQUEST_EXECUTION" - }, - { - "end": 57, - "start": 54, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "mute_config_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "create_mute_config" - }, - "description": "Sample for CreateMuteConfig", - "file": "securitycenter_v1_generated_security_center_create_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync", - "segments": [ - { - "end": 56, - "start": 27, - "type": "FULL" - }, - { - "end": 56, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 50, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 53, - "start": 51, - "type": "REQUEST_EXECUTION" - }, - { - "end": 57, - "start": 54, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_create_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_create_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "create_security_health_analytics_custom_module" - }, - "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "create_security_health_analytics_custom_module" - }, - "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_big_query_export" - }, - "description": "Sample for DeleteBigQueryExport", - "file": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_big_query_export" - }, - "description": "Sample for DeleteBigQueryExport", - "file": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_mute_config" - }, - "description": "Sample for DeleteMuteConfig", - "file": "securitycenter_v1_generated_security_center_delete_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_mute_config" - }, - "description": "Sample for DeleteMuteConfig", - "file": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1_generated_security_center_delete_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_security_health_analytics_custom_module" - }, - "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_security_health_analytics_custom_module" - }, - "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" - }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" - }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_effective_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", - "shortName": "get_effective_security_health_analytics_custom_module" - }, - "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_effective_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", - "shortName": "get_effective_security_health_analytics_custom_module" - }, - "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" - }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" - }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "get_security_health_analytics_custom_module" - }, - "description": "Sample for GetSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "get_security_health_analytics_custom_module" - }, - "description": "Sample for GetSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListBigQueryExports" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", - "shortName": "list_big_query_exports" - }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListBigQueryExports" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", - "shortName": "list_big_query_exports" - }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_descendant_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_descendant_security_health_analytics_custom_modules" - }, - "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_descendant_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_descendant_security_health_analytics_custom_modules" - }, - "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_effective_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_effective_security_health_analytics_custom_modules" - }, - "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_effective_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_effective_security_health_analytics_custom_modules" - }, - "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListMuteConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", - "shortName": "list_mute_configs" - }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListMuteConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", - "shortName": "list_mute_configs" - }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_security_health_analytics_custom_modules" - }, - "description": "Sample for ListSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_security_health_analytics_custom_modules" - }, - "description": "Sample for ListSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_mute", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetMute" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "mute", - "type": "google.cloud.securitycenter_v1.types.Finding.Mute" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_mute" - }, - "description": "Sample for SetMute", - "file": "securitycenter_v1_generated_security_center_set_mute_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_mute_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_mute", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetMute" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "mute", - "type": "google.cloud.securitycenter_v1.types.Finding.Mute" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_mute" - }, - "description": "Sample for SetMute", - "file": "securitycenter_v1_generated_security_center_set_mute_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_mute_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "update_big_query_export" - }, - "description": "Sample for UpdateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_update_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "update_big_query_export" - }, - "description": "Sample for UpdateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_external_system", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateExternalSystem" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" - }, - { - "name": "external_system", - "type": "google.cloud.securitycenter_v1.types.ExternalSystem" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", - "shortName": "update_external_system" - }, - "description": "Sample for UpdateExternalSystem", - "file": "securitycenter_v1_generated_security_center_update_external_system_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_external_system_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_external_system", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateExternalSystem" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" - }, - { - "name": "external_system", - "type": "google.cloud.securitycenter_v1.types.ExternalSystem" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", - "shortName": "update_external_system" - }, - "description": "Sample for UpdateExternalSystem", - "file": "securitycenter_v1_generated_security_center_update_external_system_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_external_system_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "update_mute_config" - }, - "description": "Sample for UpdateMuteConfig", - "file": "securitycenter_v1_generated_security_center_update_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async", - "segments": [ - { - "end": 54, - "start": 27, - "type": "FULL" - }, - { - "end": 54, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 48, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 51, - "start": 49, - "type": "REQUEST_EXECUTION" - }, - { - "end": 55, - "start": 52, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "update_mute_config" - }, - "description": "Sample for UpdateMuteConfig", - "file": "securitycenter_v1_generated_security_center_update_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync", - "segments": [ - { - "end": 54, - "start": 27, - "type": "FULL" - }, - { - "end": 54, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 48, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 51, - "start": 49, - "type": "REQUEST_EXECUTION" - }, - { - "end": 55, - "start": 52, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_update_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_update_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "update_security_health_analytics_custom_module" - }, - "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "update_security_health_analytics_custom_module" - }, - "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py b/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py deleted file mode 100644 index af2d084d..00000000 --- a/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py +++ /dev/null @@ -1,219 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'bulk_mute_findings': ('parent', 'filter', 'mute_annotation', ), - 'create_big_query_export': ('parent', 'big_query_export', 'big_query_export_id', ), - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_mute_config': ('parent', 'mute_config', 'mute_config_id', ), - 'create_notification_config': ('parent', 'config_id', 'notification_config', ), - 'create_security_health_analytics_custom_module': ('parent', 'security_health_analytics_custom_module', ), - 'create_source': ('parent', 'source', ), - 'delete_big_query_export': ('name', ), - 'delete_mute_config': ('name', ), - 'delete_notification_config': ('name', ), - 'delete_security_health_analytics_custom_module': ('name', ), - 'get_big_query_export': ('name', ), - 'get_effective_security_health_analytics_custom_module': ('name', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_mute_config': ('name', ), - 'get_notification_config': ('name', ), - 'get_organization_settings': ('name', ), - 'get_security_health_analytics_custom_module': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_big_query_exports': ('parent', 'page_size', 'page_token', ), - 'list_descendant_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_effective_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_mute_configs': ('parent', 'page_size', 'page_token', ), - 'list_notification_configs': ('parent', 'page_token', 'page_size', ), - 'list_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'set_mute': ('name', 'mute', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_big_query_export': ('big_query_export', 'update_mask', ), - 'update_external_system': ('external_system', 'update_mask', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_mute_config': ('mute_config', 'update_mask', ), - 'update_notification_config': ('notification_config', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_health_analytics_custom_module': ('security_health_analytics_custom_module', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1/setup.py b/owl-bot-staging/v1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1/testing/constraints-3.10.txt b/owl-bot-staging/v1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.11.txt b/owl-bot-staging/v1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.12.txt b/owl-bot-staging/v1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.7.txt b/owl-bot-staging/v1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1/testing/constraints-3.8.txt b/owl-bot-staging/v1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.9.txt b/owl-bot-staging/v1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/tests/__init__.py b/owl-bot-staging/v1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/__init__.py b/owl-bot-staging/v1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py deleted file mode 100644 index a136be02..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py +++ /dev/null @@ -1,26225 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.services.security_center import transports -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import contact_details -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import label -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.BulkMuteFindingsRequest, - dict, -]) -def test_bulk_mute_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_bulk_mute_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - client.bulk_mute_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - -@pytest.mark.asyncio -async def test_bulk_mute_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.BulkMuteFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_bulk_mute_findings_async_from_dict(): - await test_bulk_mute_findings_async(request_type=dict) - - -def test_bulk_mute_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.BulkMuteFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_bulk_mute_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.BulkMuteFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_bulk_mute_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.bulk_mute_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_bulk_mute_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_bulk_mute_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.bulk_mute_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_bulk_mute_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_create_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_create_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - client.create_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_async_from_dict(): - await test_create_security_health_analytics_custom_module_async(request_type=dict) - - -def test_create_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_security_health_analytics_custom_module( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - - -def test_create_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_security_health_analytics_custom_module( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateMuteConfigRequest, - dict, -]) -def test_create_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_create_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - client.create_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - -@pytest.mark.asyncio -async def test_create_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_create_mute_config_async_from_dict(): - await test_create_mute_config_async(request_type=dict) - - -def test_create_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateMuteConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - call.return_value = gcs_mute_config.MuteConfig() - client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateMuteConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - await client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_mute_config( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].mute_config_id - mock_val = 'mute_config_id_value' - assert arg == mock_val - - -def test_create_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - -@pytest.mark.asyncio -async def test_create_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_mute_config( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].mute_config_id - mock_val = 'mute_config_id_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - client.create_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_create_notification_config_async_from_dict(): - await test_create_notification_config_async(request_type=dict) - - -def test_create_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - - -def test_create_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteMuteConfigRequest, - dict, -]) -def test_delete_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - client.delete_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - -@pytest.mark.asyncio -async def test_delete_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_mute_config_async_from_dict(): - await test_delete_mute_config_async(request_type=dict) - - -def test_delete_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - call.return_value = None - client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - client.delete_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_notification_config_async_from_dict(): - await test_delete_notification_config_async(request_type=dict) - - -def test_delete_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = None - client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_delete_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - client.delete_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_async_from_dict(): - await test_delete_security_health_analytics_custom_module_async(request_type=dict) - - -def test_delete_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = None - client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetBigQueryExportRequest, - dict, -]) -def test_get_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_get_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - client.get_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_get_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_get_big_query_export_async_from_dict(): - await test_get_big_query_export_async(request_type=dict) - - -def test_get_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetMuteConfigRequest, - dict, -]) -def test_get_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_get_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - client.get_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - -@pytest.mark.asyncio -async def test_get_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_get_mute_config_async_from_dict(): - await test_get_mute_config_async(request_type=dict) - - -def test_get_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - call.return_value = mute_config.MuteConfig() - client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) - await client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - client.get_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_get_notification_config_async_from_dict(): - await test_get_notification_config_async(request_type=dict) - - -def test_get_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = notification_config.NotificationConfig() - client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_effective_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - ) - response = client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -def test_get_effective_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - client.get_effective_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - )) - response = await client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_async_from_dict(): - await test_get_effective_security_health_analytics_custom_module_async(request_type=dict) - - -def test_get_effective_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - await client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_effective_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_effective_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_effective_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_effective_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_get_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - client.get_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_async_from_dict(): - await test_get_security_health_analytics_custom_module_async(request_type=dict) - - -def test_get_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_descendant_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_descendant_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - client.list_descendant_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_from_dict(): - await test_list_descendant_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_descendant_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_descendant_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_descendant_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_descendant_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_descendant_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_descendant_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_descendant_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_descendant_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_descendant_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_descendant_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_descendant_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListMuteConfigsRequest, - dict, -]) -def test_list_mute_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_mute_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - client.list_mute_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - -@pytest.mark.asyncio -async def test_list_mute_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListMuteConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_mute_configs_async_from_dict(): - await test_list_mute_configs_async(request_type=dict) - - -def test_list_mute_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListMuteConfigsResponse() - client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_mute_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) - await client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_mute_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_mute_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_mute_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_mute_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_mute_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_mute_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - - -def test_list_mute_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_mute_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in results) -def test_list_mute_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_mute_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_mute_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_mute_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_mute_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_mute_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - client.list_notification_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - -@pytest.mark.asyncio -async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) - - -def test_list_notification_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_notification_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) -def test_list_notification_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_notification_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_notification_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_effective_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_effective_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - client.list_effective_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_from_dict(): - await test_list_effective_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_effective_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_effective_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_effective_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_effective_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_effective_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_effective_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_effective_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_effective_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_effective_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_effective_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_effective_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - client.list_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_from_dict(): - await test_list_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetMuteRequest, - dict, -]) -def test_set_mute(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_mute_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - client.set_mute() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - -@pytest.mark.asyncio -async def test_set_mute_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetMuteRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_set_mute_async_from_dict(): - await test_set_mute_async(request_type=dict) - - -def test_set_mute_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - call.return_value = finding.Finding() - client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_mute_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_mute_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_mute( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED - assert arg == mock_val - - -def test_set_mute_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - -@pytest.mark.asyncio -async def test_set_mute_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_mute( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_mute_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateExternalSystemRequest, - dict, -]) -def test_update_external_system(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - ) - response = client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -def test_update_external_system_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - client.update_external_system() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - -@pytest.mark.asyncio -async def test_update_external_system_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateExternalSystemRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - )) - response = await client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -@pytest.mark.asyncio -async def test_update_external_system_async_from_dict(): - await test_update_external_system_async(request_type=dict) - - -def test_update_external_system_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() - - request.external_system.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - call.return_value = gcs_external_system.ExternalSystem() - client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'external_system.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_external_system_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() - - request.external_system.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) - await client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'external_system.name=name_value', - ) in kw['metadata'] - - -def test_update_external_system_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_external_system_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_external_system_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_external_system_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateMuteConfigRequest, - dict, -]) -def test_update_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_update_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - client.update_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - -@pytest.mark.asyncio -async def test_update_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_update_mute_config_async_from_dict(): - await test_update_mute_config_async(request_type=dict) - - -def test_update_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() - - request.mute_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - call.return_value = gcs_mute_config.MuteConfig() - client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'mute_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() - - request.mute_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - await client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'mute_config.name=name_value', - ) in kw['metadata'] - - -def test_update_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - client.update_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) - - -def test_update_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -def test_update_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_update_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_update_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - client.update_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_async_from_dict(): - await test_update_security_health_analytics_custom_module_async(request_type=dict) - - -def test_update_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - request.security_health_analytics_custom_module.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_health_analytics_custom_module.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - request.security_health_analytics_custom_module.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_health_analytics_custom_module.name=name_value', - ) in kw['metadata'] - - -def test_update_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_health_analytics_custom_module( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_health_analytics_custom_module( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateBigQueryExportRequest, - dict, -]) -def test_create_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_create_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - client.create_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_create_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_create_big_query_export_async_from_dict(): - await test_create_big_query_export_async(request_type=dict) - - -def test_create_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_big_query_export( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = 'big_query_export_id_value' - assert arg == mock_val - - -def test_create_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - -@pytest.mark.asyncio -async def test_create_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_big_query_export( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = 'big_query_export_id_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, - dict, -]) -def test_delete_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - client.delete_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_delete_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_big_query_export_async_from_dict(): - await test_delete_big_query_export_async(request_type=dict) - - -def test_delete_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - call.return_value = None - client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, - dict, -]) -def test_update_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_update_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - client.update_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_update_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_update_big_query_export_async_from_dict(): - await test_update_big_query_export_async(request_type=dict) - - -def test_update_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() - - request.big_query_export.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'big_query_export.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() - - request.big_query_export.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'big_query_export.name=name_value', - ) in kw['metadata'] - - -def test_update_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListBigQueryExportsRequest, - dict, -]) -def test_list_big_query_exports(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_big_query_exports_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - client.list_big_query_exports() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - -@pytest.mark.asyncio -async def test_list_big_query_exports_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListBigQueryExportsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_from_dict(): - await test_list_big_query_exports_async(request_type=dict) - - -def test_list_big_query_exports_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_big_query_exports_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) - await client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_big_query_exports_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_big_query_exports( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_big_query_exports_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_big_query_exports_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_big_query_exports( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_big_query_exports_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - - -def test_list_big_query_exports_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_big_query_exports(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in results) -def test_list_big_query_exports_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = list(client.list_big_query_exports(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_big_query_exports(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_big_query_exports(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.BulkMuteFindingsRequest, - dict, -]) -def test_bulk_mute_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.bulk_mute_findings(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_bulk_mute_findings_rest_required_fields(request_type=securitycenter_service.BulkMuteFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.bulk_mute_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_bulk_mute_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_bulk_mute_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.BulkMuteFindingsRequest.pb(securitycenter_service.BulkMuteFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.BulkMuteFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.bulk_mute_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_bulk_mute_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.BulkMuteFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.bulk_mute_findings(request) - - -def test_bulk_mute_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.bulk_mute_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, args[1]) - - -def test_bulk_mute_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - - -def test_bulk_mute_findings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_create_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_create_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "securityHealthAnalyticsCustomModule", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.create_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_security_health_analytics_custom_module(request) - - -def test_create_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) - - -def test_create_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - -def test_create_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateMuteConfigRequest, - dict, -]) -def test_create_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_create_mute_config_rest_required_fields(request_type=securitycenter_service.CreateMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["mute_config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "muteConfigId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["muteConfigId"] = 'mute_config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("mute_config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == 'mute_config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_mute_config(request) - - expected_params = [ - ( - "muteConfigId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("muteConfigId", )) & set(("parent", "muteConfig", "muteConfigId", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateMuteConfigRequest.pb(securitycenter_service.CreateMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) - - request = securitycenter_service.CreateMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() - - client.create_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_mute_config(request) - - -def test_create_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) - - -def test_create_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - -def test_create_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "configId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["configId"] = 'config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "configId" in jsonified_request - assert jsonified_request["configId"] == 'config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_notification_config(request) - - expected_params = [ - ( - "configId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.CreateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_notification_config(request) - - -def test_create_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -def test_create_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteMuteConfigRequest, - dict, -]) -def test_delete_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_mute_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_mute_config_rest_required_fields(request_type=securitycenter_service.DeleteMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_mute_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteMuteConfigRequest.pb(securitycenter_service.DeleteMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_mute_config(request) - - -def test_delete_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - - -def test_delete_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_notification_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_notification_config(request) - - -def test_delete_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -def test_delete_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_delete_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_security_health_analytics_custom_module(request) - - -def test_delete_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_delete_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_delete_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetBigQueryExportRequest, - dict, -]) -def test_get_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_get_big_query_export_rest_required_fields(request_type=securitycenter_service.GetBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetBigQueryExportRequest.pb(securitycenter_service.GetBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.GetBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.get_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_big_query_export(request) - - -def test_get_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_get_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - - -def test_get_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetMuteConfigRequest, - dict, -]) -def test_get_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_get_mute_config_rest_required_fields(request_type=securitycenter_service.GetMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetMuteConfigRequest.pb(securitycenter_service.GetMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = mute_config.MuteConfig.to_json(mute_config.MuteConfig()) - - request = securitycenter_service.GetMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = mute_config.MuteConfig() - - client.get_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_mute_config(request) - - -def test_get_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_get_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - - -def test_get_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) - - request = securitycenter_service.GetNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() - - client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_notification_config(request) - - -def test_get_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -def test_get_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_effective_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -def test_get_effective_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_effective_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_effective_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_effective_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_effective_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_effective_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_effective_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.to_json(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - client.get_effective_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_effective_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_effective_security_health_analytics_custom_module(request) - - -def test_get_effective_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_effective_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}" % client.transport._host, args[1]) - - -def test_get_effective_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_get_effective_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_get_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.get_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_security_health_analytics_custom_module(request) - - -def test_get_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_get_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_get_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_descendant_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_descendant_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_descendant_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_descendant_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_descendant_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_descendant_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_descendant_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_descendant_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - client.list_descendant_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_descendant_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_descendant_security_health_analytics_custom_modules(request) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_descendant_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant" % client.transport._host, args[1]) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_descendant_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_descendant_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListMuteConfigsRequest, - dict, -]) -def test_list_mute_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_mute_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_mute_configs_rest_required_fields(request_type=securitycenter_service.ListMuteConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_mute_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_mute_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_mute_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_mute_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_mute_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_mute_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListMuteConfigsRequest.pb(securitycenter_service.ListMuteConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListMuteConfigsResponse.to_json(securitycenter_service.ListMuteConfigsResponse()) - - request = securitycenter_service.ListMuteConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListMuteConfigsResponse() - - client.list_mute_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_mute_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListMuteConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_mute_configs(request) - - -def test_list_mute_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_mute_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) - - -def test_list_mute_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - - -def test_list_mute_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_mute_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in results) - - pages = list(client.list_mute_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_notification_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_notification_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_notification_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) - - request = securitycenter_service.ListNotificationConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() - - client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_notification_configs(request) - - -def test_list_notification_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_notification_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_notification_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) - - pages = list(client.list_notification_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_effective_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_effective_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_effective_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_effective_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_effective_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_effective_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_effective_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_effective_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - client.list_effective_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_effective_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_effective_security_health_analytics_custom_modules(request) - - -def test_list_effective_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_effective_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules" % client.transport._host, args[1]) - - -def test_list_effective_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_effective_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_effective_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_effective_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - client.list_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_security_health_analytics_custom_modules(request) - - -def test_list_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) - - -def test_list_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetMuteRequest, - dict, -]) -def test_set_mute_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_mute(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_mute_rest_required_fields(request_type=securitycenter_service.SetMuteRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_mute(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_mute_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_mute._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "mute", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_mute_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_mute") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_mute") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetMuteRequest.pb(securitycenter_service.SetMuteRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetMuteRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_mute(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_mute_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetMuteRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_mute(request) - - -def test_set_mute_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_mute(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" % client.transport._host, args[1]) - - -def test_set_mute_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - -def test_set_mute_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateExternalSystemRequest, - dict, -]) -def test_update_external_system_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_external_system(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -def test_update_external_system_rest_required_fields(request_type=securitycenter_service.UpdateExternalSystemRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_external_system(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_external_system_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_external_system._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("externalSystem", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_external_system_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_external_system") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_external_system") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateExternalSystemRequest.pb(securitycenter_service.UpdateExternalSystemRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_external_system.ExternalSystem.to_json(gcs_external_system.ExternalSystem()) - - request = securitycenter_service.UpdateExternalSystemRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_external_system.ExternalSystem() - - client.update_external_system(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_external_system_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateExternalSystemRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_external_system(request) - - -def test_update_external_system_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() - - # get arguments that satisfy an http rule for this method - sample_request = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - - # get truthy value for each flattened field - mock_args = dict( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_external_system(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" % client.transport._host, args[1]) - - -def test_update_external_system_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_external_system_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateMuteConfigRequest, - dict, -]) -def test_update_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_update_mute_config_rest_required_fields(request_type=securitycenter_service.UpdateMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("muteConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateMuteConfigRequest.pb(securitycenter_service.UpdateMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) - - request = securitycenter_service.UpdateMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() - - client.update_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_mute_config(request) - - -def test_update_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_update_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.UpdateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_notification_config(request) - - -def test_update_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_update_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_update_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("securityHealthAnalyticsCustomModule", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.update_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_health_analytics_custom_module(request) - - -def test_update_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_update_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateBigQueryExportRequest, - dict, -]) -def test_create_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_create_big_query_export_rest_required_fields(request_type=securitycenter_service.CreateBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["big_query_export_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "bigQueryExportId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "bigQueryExportId" in jsonified_request - assert jsonified_request["bigQueryExportId"] == request_init["big_query_export_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["bigQueryExportId"] = 'big_query_export_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("big_query_export_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "bigQueryExportId" in jsonified_request - assert jsonified_request["bigQueryExportId"] == 'big_query_export_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_big_query_export(request) - - expected_params = [ - ( - "bigQueryExportId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(("bigQueryExportId", )) & set(("parent", "bigQueryExport", "bigQueryExportId", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateBigQueryExportRequest.pb(securitycenter_service.CreateBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.CreateBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.create_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_big_query_export(request) - - -def test_create_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) - - -def test_create_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - -def test_create_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, - dict, -]) -def test_delete_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_big_query_export(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_big_query_export_rest_required_fields(request_type=securitycenter_service.DeleteBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_big_query_export") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteBigQueryExportRequest.pb(securitycenter_service.DeleteBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_big_query_export(request) - - -def test_delete_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_delete_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - - -def test_delete_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, - dict, -]) -def test_update_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_update_big_query_export_rest_required_fields(request_type=securitycenter_service.UpdateBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("bigQueryExport", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateBigQueryExportRequest.pb(securitycenter_service.UpdateBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.UpdateBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.update_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_big_query_export(request) - - -def test_update_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{big_query_export.name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_update_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListBigQueryExportsRequest, - dict, -]) -def test_list_big_query_exports_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_big_query_exports(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_big_query_exports_rest_required_fields(request_type=securitycenter_service.ListBigQueryExportsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_big_query_exports(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_big_query_exports_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_big_query_exports._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_big_query_exports_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_big_query_exports") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_big_query_exports") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListBigQueryExportsRequest.pb(securitycenter_service.ListBigQueryExportsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListBigQueryExportsResponse.to_json(securitycenter_service.ListBigQueryExportsResponse()) - - request = securitycenter_service.ListBigQueryExportsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListBigQueryExportsResponse() - - client.list_big_query_exports(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_big_query_exports_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListBigQueryExportsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_big_query_exports(request) - - -def test_list_big_query_exports_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_big_query_exports(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) - - -def test_list_big_query_exports_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - - -def test_list_big_query_exports_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListBigQueryExportsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_big_query_exports(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in results) - - pages = list(client.list_big_query_exports(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'bulk_mute_findings', - 'create_security_health_analytics_custom_module', - 'create_source', - 'create_finding', - 'create_mute_config', - 'create_notification_config', - 'delete_mute_config', - 'delete_notification_config', - 'delete_security_health_analytics_custom_module', - 'get_big_query_export', - 'get_iam_policy', - 'get_mute_config', - 'get_notification_config', - 'get_organization_settings', - 'get_effective_security_health_analytics_custom_module', - 'get_security_health_analytics_custom_module', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_descendant_security_health_analytics_custom_modules', - 'list_findings', - 'list_mute_configs', - 'list_notification_configs', - 'list_effective_security_health_analytics_custom_modules', - 'list_security_health_analytics_custom_modules', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_mute', - 'set_iam_policy', - 'test_iam_permissions', - 'update_external_system', - 'update_finding', - 'update_mute_config', - 'update_notification_config', - 'update_organization_settings', - 'update_security_health_analytics_custom_module', - 'update_source', - 'update_security_marks', - 'create_big_query_export', - 'delete_big_query_export', - 'update_big_query_export', - 'list_big_query_exports', - 'get_operation', - 'cancel_operation', - 'delete_operation', - 'list_operations', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.bulk_mute_findings._session - session2 = client2.transport.bulk_mute_findings._session - assert session1 != session2 - session1 = client1.transport.create_security_health_analytics_custom_module._session - session2 = client2.transport.create_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.create_mute_config._session - session2 = client2.transport.create_mute_config._session - assert session1 != session2 - session1 = client1.transport.create_notification_config._session - session2 = client2.transport.create_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_mute_config._session - session2 = client2.transport.delete_mute_config._session - assert session1 != session2 - session1 = client1.transport.delete_notification_config._session - session2 = client2.transport.delete_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_security_health_analytics_custom_module._session - session2 = client2.transport.delete_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_big_query_export._session - session2 = client2.transport.get_big_query_export._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_mute_config._session - session2 = client2.transport.get_mute_config._session - assert session1 != session2 - session1 = client1.transport.get_notification_config._session - session2 = client2.transport.get_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_effective_security_health_analytics_custom_module._session - session2 = client2.transport.get_effective_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_security_health_analytics_custom_module._session - session2 = client2.transport.get_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_descendant_security_health_analytics_custom_modules._session - session2 = client2.transport.list_descendant_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_mute_configs._session - session2 = client2.transport.list_mute_configs._session - assert session1 != session2 - session1 = client1.transport.list_notification_configs._session - session2 = client2.transport.list_notification_configs._session - assert session1 != session2 - session1 = client1.transport.list_effective_security_health_analytics_custom_modules._session - session2 = client2.transport.list_effective_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_security_health_analytics_custom_modules._session - session2 = client2.transport.list_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_mute._session - session2 = client2.transport.set_mute._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_external_system._session - session2 = client2.transport.update_external_system._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_mute_config._session - session2 = client2.transport.update_mute_config._session - assert session1 != session2 - session1 = client1.transport.update_notification_config._session - session2 = client2.transport.update_notification_config._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_security_health_analytics_custom_module._session - session2 = client2.transport.update_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 - session1 = client1.transport.create_big_query_export._session - session2 = client2.transport.create_big_query_export._session - assert session1 != session2 - session1 = client1.transport.delete_big_query_export._session - session2 = client2.transport.delete_big_query_export._session - assert session1 != session2 - session1 = client1.transport.update_big_query_export._session - session2 = client2.transport.update_big_query_export._session - assert session1 != session2 - session1 = client1.transport.list_big_query_exports._session - session2 = client2.transport.list_big_query_exports._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_big_query_export_path(): - organization = "oyster" - export = "nudibranch" - expected = "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) - actual = SecurityCenterClient.big_query_export_path(organization, export) - assert expected == actual - - -def test_parse_big_query_export_path(): - expected = { - "organization": "cuttlefish", - "export": "mussel", - } - path = SecurityCenterClient.big_query_export_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_big_query_export_path(path) - assert expected == actual - -def test_effective_security_health_analytics_custom_module_path(): - organization = "winkle" - effective_custom_module = "nautilus" - expected = "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) - actual = SecurityCenterClient.effective_security_health_analytics_custom_module_path(organization, effective_custom_module) - assert expected == actual - - -def test_parse_effective_security_health_analytics_custom_module_path(): - expected = { - "organization": "scallop", - "effective_custom_module": "abalone", - } - path = SecurityCenterClient.effective_security_health_analytics_custom_module_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path(path) - assert expected == actual - -def test_external_system_path(): - organization = "squid" - source = "clam" - finding = "whelk" - externalsystem = "octopus" - expected = "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) - actual = SecurityCenterClient.external_system_path(organization, source, finding, externalsystem) - assert expected == actual - - -def test_parse_external_system_path(): - expected = { - "organization": "oyster", - "source": "nudibranch", - "finding": "cuttlefish", - "externalsystem": "mussel", - } - path = SecurityCenterClient.external_system_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_external_system_path(path) - assert expected == actual - -def test_finding_path(): - organization = "winkle" - source = "nautilus" - finding = "scallop" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "abalone", - "source": "squid", - "finding": "clam", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_mute_config_path(): - organization = "whelk" - mute_config = "octopus" - expected = "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) - actual = SecurityCenterClient.mute_config_path(organization, mute_config) - assert expected == actual - - -def test_parse_mute_config_path(): - expected = { - "organization": "oyster", - "mute_config": "nudibranch", - } - path = SecurityCenterClient.mute_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_mute_config_path(path) - assert expected == actual - -def test_notification_config_path(): - organization = "cuttlefish" - notification_config = "mussel" - expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - actual = SecurityCenterClient.notification_config_path(organization, notification_config) - assert expected == actual - - -def test_parse_notification_config_path(): - expected = { - "organization": "winkle", - "notification_config": "nautilus", - } - path = SecurityCenterClient.notification_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_notification_config_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "scallop" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "abalone", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_health_analytics_custom_module_path(): - organization = "squid" - custom_module = "clam" - expected = "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) - actual = SecurityCenterClient.security_health_analytics_custom_module_path(organization, custom_module) - assert expected == actual - - -def test_parse_security_health_analytics_custom_module_path(): - expected = { - "organization": "whelk", - "custom_module": "octopus", - } - path = SecurityCenterClient.security_health_analytics_custom_module_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_health_analytics_custom_module_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "oyster" - asset = "nudibranch" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "cuttlefish", - "asset": "mussel", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "winkle" - source = "nautilus" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "scallop", - "source": "abalone", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_topic_path(): - project = "squid" - topic = "clam" - expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - actual = SecurityCenterClient.topic_path(project, topic) - assert expected == actual - - -def test_parse_topic_path(): - expected = { - "project": "whelk", - "topic": "octopus", - } - path = SecurityCenterClient.topic_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_topic_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nudibranch", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "mussel", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "winkle" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "nautilus", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "scallop" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "abalone", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "squid" - location = "clam" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "whelk", - "location": "octopus", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_cancel_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.CancelOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.cancel_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.CancelOperationRequest, - dict, -]) -def test_cancel_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '{}' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.cancel_operation(request) - - # Establish that the response is the type that we expect. - assert response is None - -def test_delete_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.DeleteOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.DeleteOperationRequest, - dict, -]) -def test_delete_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '{}' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_operation(request) - - # Establish that the response is the type that we expect. - assert response is None - -def test_get_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.GetOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.GetOperationRequest, - dict, -]) -def test_get_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_operation(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) - -def test_list_operations_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.ListOperationsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_operations(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.ListOperationsRequest, - dict, -]) -def test_list_operations_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.ListOperationsResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_operations(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) - - -def test_delete_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.DeleteOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None -@pytest.mark.asyncio -async def test_delete_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.DeleteOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None - -def test_delete_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.DeleteOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - call.return_value = None - - client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_delete_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.DeleteOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - await client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_delete_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - - response = client.delete_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_delete_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.delete_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_cancel_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.CancelOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None -@pytest.mark.asyncio -async def test_cancel_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.CancelOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None - -def test_cancel_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.CancelOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - call.return_value = None - - client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_cancel_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.CancelOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - await client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_cancel_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - - response = client.cancel_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_cancel_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.cancel_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_get_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.GetOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation() - response = client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) -@pytest.mark.asyncio -async def test_get_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.GetOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - response = await client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) - -def test_get_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.GetOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - call.return_value = operations_pb2.Operation() - - client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_get_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.GetOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - await client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_get_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation() - - response = client.get_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_get_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - response = await client.get_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_list_operations(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.ListOperationsRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.ListOperationsResponse() - response = client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) -@pytest.mark.asyncio -async def test_list_operations_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.ListOperationsRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - response = await client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) - -def test_list_operations_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.ListOperationsRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - call.return_value = operations_pb2.ListOperationsResponse() - - client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_list_operations_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.ListOperationsRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - await client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_list_operations_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.ListOperationsResponse() - - response = client.list_operations( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_list_operations_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - response = await client.list_operations( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1beta1/.coveragerc b/owl-bot-staging/v1beta1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1beta1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1beta1/.flake8 b/owl-bot-staging/v1beta1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1beta1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1beta1/MANIFEST.in b/owl-bot-staging/v1beta1/MANIFEST.in deleted file mode 100644 index 328e3b89..00000000 --- a/owl-bot-staging/v1beta1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1beta1 *.py diff --git a/owl-bot-staging/v1beta1/README.rst b/owl-bot-staging/v1beta1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1beta1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1beta1/docs/conf.py b/owl-bot-staging/v1beta1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1beta1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1beta1/docs/index.rst b/owl-bot-staging/v1beta1/docs/index.rst deleted file mode 100644 index 88360626..00000000 --- a/owl-bot-staging/v1beta1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1beta1/services - securitycenter_v1beta1/types diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst deleted file mode 100644 index 304849ec..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst deleted file mode 100644 index a09a4b86..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1beta1 API -==================================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst deleted file mode 100644 index 0bbeba06..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1beta1 API -================================================= - -.. automodule:: google.cloud.securitycenter_v1beta1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index 51dcecf3..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1beta1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1beta1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1beta1.types.asset import Asset -from google.cloud.securitycenter_v1beta1.types.finding import Finding -from google.cloud.securitycenter_v1beta1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1beta1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1beta1.types.source import Source - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Asset', - 'Finding', - 'OrganizationSettings', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py deleted file mode 100644 index e12212ee..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.asset import Asset -from .types.finding import Finding -from .types.organization_settings import OrganizationSettings -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source - -__all__ = ( - 'SecurityCenterAsyncClient', -'Asset', -'CreateFindingRequest', -'CreateSourceRequest', -'Finding', -'GetOrganizationSettingsRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'ListAssetsRequest', -'ListAssetsResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'OrganizationSettings', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityMarks', -'SetFindingStateRequest', -'Source', -'UpdateFindingRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json deleted file mode 100644 index afd9dcb0..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json +++ /dev/null @@ -1,298 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1beta1", - "protoPackage": "google.cloud.securitycenter.v1beta1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py deleted file mode 100644 index ec8dc818..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py +++ /dev/null @@ -1,2406 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1 Beta APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". - To groupBy across all sources provide a source_id of - ``-``. For example: - organizations/{organization_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state``). The string value - should follow SQL syntax: comma separated list of - fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated - empty messages in your APIs. A typical example is to - use it as the request or the response type of an API - method. For instance: - - service Foo { - rpc Bar(google.protobuf.Empty) returns - (google.protobuf.Empty); - - } - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - empty_pb2.Empty, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1beta1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1beta1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1beta1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py deleted file mode 100644 index f2b32f05..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py +++ /dev/null @@ -1,2585 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1 Beta APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". - To groupBy across all sources provide a source_id of - ``-``. For example: - organizations/{organization_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state``). The string value - should follow SQL syntax: comma separated list of - fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated - empty messages in your APIs. A typical example is to - use it as the request or the response type of an API - method. For instance: - - service Foo { - rpc Bar(google.protobuf.Empty) returns - (google.protobuf.Empty); - - } - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - empty_pb2.Empty, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py deleted file mode 100644 index 75b8f79f..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py +++ /dev/null @@ -1,625 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``findings`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``findings`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[finding.Finding]: - for page in self.pages: - yield from page.findings - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``findings`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``findings`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[finding.Finding]: - async def async_generator(): - async for page in self.pages: - for response in page.findings: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py deleted file mode 100644 index 67f98e00..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py +++ /dev/null @@ -1,465 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py deleted file mode 100644 index 09e8e582..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,754 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - self.grpc_channel.close() - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 787c4fd4..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,753 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - return self.grpc_channel.close() - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py deleted file mode 100644 index 5b741462..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py +++ /dev/null @@ -1,2570 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1beta1/{name=organizations/*/operations/*}:cancel', - 'body': '*', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1beta1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py deleted file mode 100644 index d0d3788c..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- 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. -# -from .asset import ( - Asset, -) -from .finding import ( - Finding, -) -from .organization_settings import ( - OrganizationSettings, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - CreateFindingRequest, - CreateSourceRequest, - GetOrganizationSettingsRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListFindingsRequest, - ListFindingsResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - UpdateFindingRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) - -__all__ = ( - 'Asset', - 'Finding', - 'OrganizationSettings', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py deleted file mode 100644 index a5809052..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1beta1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated, - added, or deleted in Security Command Center. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - Immutable. The full resource name of the Google Cloud - resource this asset represents. This field is immutable - after create time. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py deleted file mode 100644 index 4a146544..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data (security, risk, health - or privacy) ingested into Security Command Center for - presentation, notification, analysis, policy testing, and - enforcement. For example, an XSS vulnerability in an App Engine - application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - Immutable. The relative resource name of the source the - finding belongs to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the event took place, or - when an update to the finding occurred. For - example, if the finding represents an open - firewall it would capture the time the detector - believes the firewall became open. The accuracy - is determined by the detector. If the finding - were to be resolved afterward, this time would - reflect when the finding was resolved. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py deleted file mode 100644 index d58da929..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py deleted file mode 100644 index 6014fa5e..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py deleted file mode 100644 index 437c4844..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py deleted file mode 100644 index 3002ea9b..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py +++ /dev/null @@ -1,1053 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import asset as gcs_asset -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'RunAssetDiscoveryRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - }, -) - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - alphanumeric and less than or equal to 32 - characters and greater than 0 characters in - length. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. Name of the organization to groupBy. Its format is - "organizations/[organization_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``resource_properties.size = 100`` is a valid - filter string. - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_type - - security_center_properties.resource_parent - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the Asset's "state" property - is updated to indicate whether the asset was added, removed, - or remained present during the compare_duration period of - time that precedes the read_time. This is the time between - (read_time - compare_duration) and read_time. - - The state value is derived based on the presence of the - asset at the two points in time. Intermediate state changes - between the two times don't affect the result. For example, - the results aren't affected if the asset is removed and - re-created again. - - Possible "state" values when compare_duration is specified: - - - "ADDED": indicates that the asset was not present before - compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - This field is ignored if ``state`` is not a field in - ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". To - groupBy across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``source_properties.size = 100`` is a valid - filter string. - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state``). The string value should - follow SQL syntax: comma separated list of fields. For - example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=5, - ) - page_size: int = proto.Field( - proto.INT32, - number=6, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1beta1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. Name of the organization assets should belong to. - Its format is "organizations/[organization_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``resource_properties.size = 100`` is a valid - filter string. - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetResult's "state" - attribute is updated to indicate whether the asset was - added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state value is derived based on the presence of the - asset at the two points in time. Intermediate state changes - between the two times don't affect the result. For example, - the results aren't affected if the asset is removed and - re-created again. - - Possible "state" values when compare_duration is specified: - - - "ADDED": indicates that the asset was not present before - compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state is "UNUSED", which indicates that the asset is present - at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - Optional. A field mask to specify the - ListAssetsResult fields to be listed in the - response. An empty field mask will list all - fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1beta1.types.Asset): - Asset matching the search request. - state (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult.State): - State of the asset. - """ - class State(proto.Enum): - r"""State of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state should be: UNUSED - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - UNUSED (1): - Request did not specify use of this field in - the result. - ADDED (2): - Asset was added between the points in time. - REMOVED (3): - Asset was removed between the points in time. - ACTIVE (4): - Asset was active at both point(s) in time. - """ - STATE_UNSPECIFIED = 0 - UNUSED = 1 - ADDED = 2 - REMOVED = 3 - ACTIVE = 4 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state: 'ListAssetsResponse.ListAssetsResult.State' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.State', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id]". To - list across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``source_properties.size = 100`` is a valid - filter string. - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - Optional. A field mask to specify the Finding - fields to be listed in the response. An empty - field mask will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=5, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=6, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - findings (MutableSequence[google.cloud.securitycenter_v1beta1.types.Finding]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - @property - def raw_page(self): - return self - - findings: MutableSequence[gcs_finding.Finding] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The relative resource name of the finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - finding resource. This field should not be - specified when creating a finding. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - security marks resource. - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py deleted file mode 100644 index df1b06d0..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, etc. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and - outdated/insecure libraries.". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/mypy.ini b/owl-bot-staging/v1beta1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1beta1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1beta1/noxfile.py b/owl-bot-staging/v1beta1/noxfile.py deleted file mode 100644 index 3a5d7759..00000000 --- a/owl-bot-staging/v1beta1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1beta1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py deleted file mode 100644 index 16c9f9ca..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 5e9622dd..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py deleted file mode 100644 index 2e0ee1f0..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py deleted file mode 100644 index 3e58b73c..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index 382ce3d5..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 50a057a4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index 82ccf1eb..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index d6b90e79..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py deleted file mode 100644 index b46faa07..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py deleted file mode 100644 index eb56d38d..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py deleted file mode 100644 index e61fe1d2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 91b5495d..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py deleted file mode 100644 index b999ac21..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py deleted file mode 100644 index ed1728b4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py deleted file mode 100644 index 51c33255..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 7504427b..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py deleted file mode 100644 index 26091eec..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py deleted file mode 100644 index 9d5b95c6..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py deleted file mode 100644 index 14530f85..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py deleted file mode 100644 index fcea7e74..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index 856c1087..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index f38b2d3a..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index fb598fda..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index f7e2f41f..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index c2954da2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index 78e1f4ec..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index 78f7f4e4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index 3de02a54..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py deleted file mode 100644 index 207d45ef..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py deleted file mode 100644 index 6372ddb2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index 3a930b97..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index eaa43ba9..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 7ad9a249..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index b620d717..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py deleted file mode 100644 index b55b9c80..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py deleted file mode 100644 index 16168c1b..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json b/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json deleted file mode 100644 index a4c1295e..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json +++ /dev/null @@ -1,2945 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1beta1", - "version": "v1beta1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1beta1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1beta1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1beta1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1beta1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1beta1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1beta1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1beta1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1beta1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1beta1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1beta1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1beta1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1beta1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1beta1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py b/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py deleted file mode 100644 index 7b743d2a..00000000 --- a/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py +++ /dev/null @@ -1,193 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_source': ('parent', 'source', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_organization_settings': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'field_mask', 'page_token', 'page_size', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1beta1/setup.py b/owl-bot-staging/v1beta1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1beta1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1beta1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1beta1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1beta1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1beta1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1beta1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1beta1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/tests/__init__.py b/owl-bot-staging/v1beta1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/__init__.py b/owl-bot-staging/v1beta1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py deleted file mode 100644 index c6200162..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py +++ /dev/null @@ -1,10951 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.services.security_center import transports -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, finding.Finding) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, finding.Finding) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, finding.Finding) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'create_source', - 'create_finding', - 'get_iam_policy', - 'get_organization_settings', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_findings', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_iam_policy', - 'test_iam_permissions', - 'update_finding', - 'update_organization_settings', - 'update_source', - 'update_security_marks', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "scallop" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "abalone", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "oyster" - source = "nudibranch" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "cuttlefish", - "source": "mussel", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "winkle" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nautilus", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "scallop" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "abalone", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "squid" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "clam", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "whelk" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "octopus", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "oyster" - location = "nudibranch" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "cuttlefish", - "location": "mussel", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1p1beta1/.coveragerc b/owl-bot-staging/v1p1beta1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1p1beta1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1p1beta1/.flake8 b/owl-bot-staging/v1p1beta1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1p1beta1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1p1beta1/MANIFEST.in b/owl-bot-staging/v1p1beta1/MANIFEST.in deleted file mode 100644 index 57b563bd..00000000 --- a/owl-bot-staging/v1p1beta1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1p1beta1 *.py diff --git a/owl-bot-staging/v1p1beta1/README.rst b/owl-bot-staging/v1p1beta1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1p1beta1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1p1beta1/docs/conf.py b/owl-bot-staging/v1p1beta1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1p1beta1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1p1beta1/docs/index.rst b/owl-bot-staging/v1p1beta1/docs/index.rst deleted file mode 100644 index 45263147..00000000 --- a/owl-bot-staging/v1p1beta1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1p1beta1/services - securitycenter_v1p1beta1/types diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst deleted file mode 100644 index adab7f4a..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst deleted file mode 100644 index 7f537e85..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1p1beta1 API -====================================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst deleted file mode 100644 index a68ac5c6..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1p1beta1 API -=================================================== - -.. automodule:: google.cloud.securitycenter_v1p1beta1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index af60b39b..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1p1beta1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1p1beta1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1p1beta1.types.asset import Asset -from google.cloud.securitycenter_v1p1beta1.types.finding import Finding -from google.cloud.securitycenter_v1p1beta1.types.folder import Folder -from google.cloud.securitycenter_v1p1beta1.types.notification_config import NotificationConfig -from google.cloud.securitycenter_v1p1beta1.types.notification_message import NotificationMessage -from google.cloud.securitycenter_v1p1beta1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1p1beta1.types.resource import Resource -from google.cloud.securitycenter_v1p1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1p1beta1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import DeleteNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.source import Source - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Asset', - 'Finding', - 'Folder', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'Resource', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py deleted file mode 100644 index 55bd462e..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.asset import Asset -from .types.finding import Finding -from .types.folder import Folder -from .types.notification_config import NotificationConfig -from .types.notification_message import NotificationMessage -from .types.organization_settings import OrganizationSettings -from .types.resource import Resource -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateNotificationConfigRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import DeleteNotificationConfigRequest -from .types.securitycenter_service import GetNotificationConfigRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListNotificationConfigsRequest -from .types.securitycenter_service import ListNotificationConfigsResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateNotificationConfigRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source - -__all__ = ( - 'SecurityCenterAsyncClient', -'Asset', -'CreateFindingRequest', -'CreateNotificationConfigRequest', -'CreateSourceRequest', -'DeleteNotificationConfigRequest', -'Finding', -'Folder', -'GetNotificationConfigRequest', -'GetOrganizationSettingsRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'ListAssetsRequest', -'ListAssetsResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListNotificationConfigsRequest', -'ListNotificationConfigsResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'NotificationConfig', -'NotificationMessage', -'OrganizationSettings', -'Resource', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityMarks', -'SetFindingStateRequest', -'Source', -'UpdateFindingRequest', -'UpdateNotificationConfigRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json deleted file mode 100644 index 892a85e5..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json +++ /dev/null @@ -1,373 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1p1beta1", - "protoPackage": "google.cloud.securitycenter.v1p1beta1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py deleted file mode 100644 index 7347ebbc..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py +++ /dev/null @@ -1,3083 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1p1Beta1 APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) - parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - topic_path = staticmethod(SecurityCenterClient.topic_path) - parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]]): - The request object. Request message for creating a - notification config. - parent (:class:`str`): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be between 1 and 128 characters, - and contains alphanumeric characters, - underscores or hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]]): - The request object. Request message for deleting a - notification config. - name (:class:`str`): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]]): - The request object. Request message for getting a - notification config. - name (:class:`str`): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - parent (:class:`str`): - Required. Name of the organization assets should belong - to. Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListAssetsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - parent (:class:`str`): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. - parent (:class:`str`): - Required. Name of the organization to list notification - configs. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListNotificationConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id], folders/[folder_id], - or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a - finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing - source_properties. Individual source_properties can be - added/updated by using "source_properties." in the field - mask. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]]): - The request object. Request message for updating a - notification config. - notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the source resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1p1beta1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If - empty or set to "marks", all marks will be replaced. - Individual marks can be updated using - "marks.". - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py deleted file mode 100644 index 887e5f66..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py +++ /dev/null @@ -1,3264 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1p1Beta1 APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def notification_config_path(organization: str,notification_config: str,) -> str: - """Returns a fully-qualified notification_config string.""" - return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - - @staticmethod - def parse_notification_config_path(path: str) -> Dict[str,str]: - """Parses a notification_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def topic_path(project: str,topic: str,) -> str: - """Returns a fully-qualified topic string.""" - return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - - @staticmethod - def parse_topic_path(path: str) -> Dict[str,str]: - """Parses a topic path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]): - The request object. Request message for creating a - notification config. - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be between 1 and 128 characters, - and contains alphanumeric characters, - underscores or hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): - request = securitycenter_service.CreateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]): - The request object. Request message for deleting a - notification config. - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): - request = securitycenter_service.DeleteNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]): - The request object. Request message for getting a - notification config. - name (str): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): - request = securitycenter_service.GetNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - parent (str): - Required. Name of the organization assets should belong - to. Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. - parent (str): - Required. Name of the organization to list notification - configs. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): - request = securitycenter_service.ListNotificationConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id], folders/[folder_id], - or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a - finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing - source_properties. Individual source_properties can be - added/updated by using "source_properties." in the field - mask. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]): - The request object. Request message for updating a - notification config. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): - request = securitycenter_service.UpdateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the source resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If - empty or set to "marks", all marks will be replaced. - Individual marks can be updated using - "marks.". - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py deleted file mode 100644 index 43850428..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py +++ /dev/null @@ -1,746 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - for page in self.pages: - yield from page.list_findings_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_findings_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[notification_config.NotificationConfig]: - for page in self.pages: - yield from page.notification_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsAsyncPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.notification_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py deleted file mode 100644 index a714de00..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py +++ /dev/null @@ -1,552 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.create_notification_config: gapic_v1.method.wrap_method( - self.create_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_notification_config: gapic_v1.method.wrap_method( - self.delete_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_notification_config: gapic_v1.method.wrap_method( - self.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_notification_configs: gapic_v1.method.wrap_method( - self.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_notification_config: gapic_v1.method.wrap_method( - self.update_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Union[ - notification_config.NotificationConfig, - Awaitable[notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Union[ - securitycenter_service.ListNotificationConfigsResponse, - Awaitable[securitycenter_service.ListNotificationConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py deleted file mode 100644 index 50fdbe6a..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,889 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - ~.ListNotificationConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - self.grpc_channel.close() - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 5376ce4f..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,888 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Awaitable[notification_config.NotificationConfig]]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - Awaitable[~.ListNotificationConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - return self.grpc_channel.close() - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py deleted file mode 100644 index bdf7e4a6..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py +++ /dev/null @@ -1,3232 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_delete_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_notification_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_notification_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: - """Post-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: - """Post-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}:cancel', - 'body': '*', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1p1beta1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "configId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the create notification - config method over HTTP. - - Args: - request (~.securitycenter_service.CreateNotificationConfigRequest): - The request object. Request message for creating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_create_notification_config(request, metadata) - pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_notification_config(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _DeleteNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete notification - config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteNotificationConfigRequest): - The request object. Request message for deleting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) - pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> notification_config.NotificationConfig: - r"""Call the get notification config method over HTTP. - - Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_notification_config(request, metadata) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=folders/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=projects/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListNotificationConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListNotificationConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListNotificationConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListNotificationConfigsResponse: - r"""Call the list notification configs method over HTTP. - - Args: - request (~.securitycenter_service.ListNotificationConfigsRequest): - The request object. Request message for listing - notification configs. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListNotificationConfigsResponse: - Response message for listing - notification configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) - pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListNotificationConfigsResponse() - pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_notification_configs(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=folders/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=projects/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=folders/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=projects/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the update notification - config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateNotificationConfigRequest): - The request object. Request message for updating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_update_notification_config(request, metadata) - pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_notification_config(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=folders/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=projects/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py deleted file mode 100644 index ec6cbc99..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- 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. -# -from .asset import ( - Asset, -) -from .finding import ( - Finding, -) -from .folder import ( - Folder, -) -from .notification_config import ( - NotificationConfig, -) -from .notification_message import ( - NotificationMessage, -) -from .organization_settings import ( - OrganizationSettings, -) -from .resource import ( - Resource, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - CreateFindingRequest, - CreateNotificationConfigRequest, - CreateSourceRequest, - DeleteNotificationConfigRequest, - GetNotificationConfigRequest, - GetOrganizationSettingsRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListFindingsRequest, - ListFindingsResponse, - ListNotificationConfigsRequest, - ListNotificationConfigsResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - UpdateFindingRequest, - UpdateNotificationConfigRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) - -__all__ = ( - 'Asset', - 'Finding', - 'Folder', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'Resource', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py deleted file mode 100644 index d61c427b..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py +++ /dev/null @@ -1,227 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import folder -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1p1beta1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated - or added in Cloud SCC. - iam_policy (google.cloud.securitycenter_v1p1beta1.types.Asset.IamPolicy): - Cloud IAM Policy information associated with - the Google Cloud resource described by the - Security Command Center asset. This information - is managed and defined by the Google Cloud - resource and cannot be modified by the user. - canonical_name (str): - The canonical name of the resource. It's either - "organizations/{organization_id}/assets/{asset_id}", - "folders/{folder_id}/assets/{asset_id}" or - "projects/{project_number}/assets/{asset_id}", depending on - the closest CRM ancestor of the resource. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - The full resource name of the Google Cloud resource this - asset represents. This field is immutable after create time. - See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - resource_display_name (str): - The user defined display name for this - resource. - resource_parent_display_name (str): - The user defined display name for the parent - of this resource. - resource_project_display_name (str): - The user defined display name for the project - of this resource. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - resource_display_name: str = proto.Field( - proto.STRING, - number=6, - ) - resource_parent_display_name: str = proto.Field( - proto.STRING, - number=7, - ) - resource_project_display_name: str = proto.Field( - proto.STRING, - number=8, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - class IamPolicy(proto.Message): - r"""Cloud IAM Policy information associated with the Google Cloud - resource described by the Security Command Center asset. This - information is managed and defined by the Google Cloud resource - and cannot be modified by the user. - - Attributes: - policy_blob (str): - The JSON representation of the Policy - associated with the asset. See - https://cloud.google.com/iam/docs/reference/rest/v1/Policy - for format details. - """ - - policy_blob: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - iam_policy: IamPolicy = proto.Field( - proto.MESSAGE, - number=11, - message=IamPolicy, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=13, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py deleted file mode 100644 index e74ce6ab..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py +++ /dev/null @@ -1,208 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data (security, risk, health - or privacy) ingested into Security Command Center for - presentation, notification, analysis, policy testing, and - enforcement. For example, an XSS vulnerability in an App Engine - application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - The relative resource name of the source the finding belongs - to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the event took place, or - when an update to the finding occurred. For - example, if the finding represents an open - firewall it would capture the time the detector - believes the firewall became open. The accuracy - is determined by the detector. If the finding - were to be resolved afterward, this time would - reflect when the finding was resolved. Must not - be set to a value greater than the current - timestamp. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - severity (google.cloud.securitycenter_v1p1beta1.types.Finding.Severity): - The severity of the finding. This field is - managed by the source that writes the finding. - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" - or - "projects/{project_number}/sources/{source_id}/findings/{finding_id}", - depending on the closest CRM ancestor of the resource - associated with the finding. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - class Severity(proto.Enum): - r"""The severity of the finding. This field is managed by the - source that writes the finding. - - Values: - SEVERITY_UNSPECIFIED (0): - No severity specified. The default value. - CRITICAL (1): - Critical severity. - HIGH (2): - High severity. - MEDIUM (3): - Medium severity. - LOW (4): - Low severity. - """ - SEVERITY_UNSPECIFIED = 0 - CRITICAL = 1 - HIGH = 2 - MEDIUM = 3 - LOW = 4 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - severity: Severity = proto.Field( - proto.ENUM, - number=13, - enum=Severity, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py deleted file mode 100644 index 81667385..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Folder', - }, -) - - -class Folder(proto.Message): - r"""Message that contains the resource name and display name of a - folder resource. - - Attributes: - resource_folder (str): - Full resource name of this folder. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_folder_display_name (str): - The user defined display name for this - folder. - """ - - resource_folder: str = proto.Field( - proto.STRING, - number=1, - ) - resource_folder_display_name: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py deleted file mode 100644 index a4e12bfe..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'NotificationConfig', - }, -) - - -class NotificationConfig(proto.Message): - r"""Security Command Center notification configs. - A notification config is a Security Command Center resource that - contains the configuration to send notifications for - create/update events of findings, assets and etc. - - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - name (str): - The relative resource name of this notification config. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/notificationConfigs/notify_public_bucket". - description (str): - The description of the notification config - (max of 1024 characters). - event_type (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.EventType): - The type of events the config is for, e.g. - FINDING. - pubsub_topic (str): - The Pub/Sub topic to send notifications to. Its format is - "projects/[project_id]/topics/[topic]". - service_account (str): - Output only. The service account that needs - "pubsub.topics.publish" permission to publish to - the Pub/Sub topic. - streaming_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.StreamingConfig): - The config for triggering streaming-based - notifications. - - This field is a member of `oneof`_ ``notify_config``. - """ - class EventType(proto.Enum): - r"""The type of events. - - Values: - EVENT_TYPE_UNSPECIFIED (0): - Unspecified event type. - FINDING (1): - Events for findings. - """ - EVENT_TYPE_UNSPECIFIED = 0 - FINDING = 1 - - class StreamingConfig(proto.Message): - r"""The config for streaming-based notifications, which send each - event as soon as it is detected. - - Attributes: - filter (str): - Expression that defines the filter to apply across - create/update events of assets or findings as specified by - the event type. The expression is a list of zero or more - restrictions combined via logical operators ``AND`` and - ``OR``. Parentheses are supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - """ - - filter: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - event_type: EventType = proto.Field( - proto.ENUM, - number=3, - enum=EventType, - ) - pubsub_topic: str = proto.Field( - proto.STRING, - number=4, - ) - service_account: str = proto.Field( - proto.STRING, - number=5, - ) - streaming_config: StreamingConfig = proto.Field( - proto.MESSAGE, - number=6, - oneof='notify_config', - message=StreamingConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py deleted file mode 100644 index a4834ac4..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import resource as gcs_resource - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'NotificationMessage', - }, -) - - -class NotificationMessage(proto.Message): - r"""Security Command Center's Notification - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - notification_config_name (str): - Name of the notification config that - generated current notification. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - If it's a Finding based notification config, - this field will be populated. - - This field is a member of `oneof`_ ``event``. - resource (google.cloud.securitycenter_v1p1beta1.types.Resource): - The Cloud resource tied to the notification. - """ - - notification_config_name: str = proto.Field( - proto.STRING, - number=1, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=2, - oneof='event', - message=gcs_finding.Finding, - ) - resource: gcs_resource.Resource = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_resource.Resource, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py deleted file mode 100644 index 0ef9a722..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - folder_ids (MutableSequence[str]): - The folder ids to use for filtering asset - discovery. It consists of only digits, e.g., - 756619654966. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - folder_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py deleted file mode 100644 index 907f895c..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import folder - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Resource', - }, -) - - -class Resource(proto.Message): - r"""Information related to the Google Cloud resource. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - project (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The human readable name of project that the - resource belongs to. - parent (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Output only. Contains a Folder message for - each folder in the assets ancestry. The first - folder is the deepest nested folder, and the - last folder is the folder directly under the - Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - project: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py deleted file mode 100644 index e1eb6547..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py deleted file mode 100644 index de35f3c7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - canonical_name (str): - The canonical name of the marks. Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "folders/{folder_id}/assets/{asset_id}/securityMarks" - "projects/{project_number}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py deleted file mode 100644 index 21eb74c9..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py +++ /dev/null @@ -1,1641 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import asset as gcs_asset -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import folder -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'RunAssetDiscoveryRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - }, -) - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateNotificationConfigRequest(proto.Message): - r"""Request message for creating a notification config. - - Attributes: - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - config_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - between 1 and 128 characters, and contains - alphanumeric characters, underscores or hyphens - only. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config being - created. The name and the service account will - be ignored as they are both output only fields - on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - config_id: str = proto.Field( - proto.STRING, - number=2, - ) - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_notification_config.NotificationConfig, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class DeleteNotificationConfigRequest(proto.Message): - r"""Request message for deleting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetNotificationConfigRequest(proto.Message): - r"""Request message for getting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to get. Its format - is - "organizations/[organization_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. Name of the organization to groupBy. Its format is - "organizations/[organization_id], folders/[folder_id], or - projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_name_display_name: - ``=``, ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_project_display_name - - security_center_properties.resource_type - - security_center_properties.resource_parent - - security_center_properties.resource_parent_display_name - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - - security_center_properties.resource_project_display_name - - security_center_properties.resource_parent_display_name - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" property is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - - severity: ``=``, ``:`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state_change``). The string value - should follow SQL syntax: comma separated list of fields. - For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration is - set: - - - state_change - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListNotificationConfigsRequest(proto.Message): - r"""Request message for listing notification configs. - - Attributes: - parent (str): - Required. Name of the organization to list notification - configs. Its format is "organizations/[organization_id]". - page_token (str): - The value returned by the last - ``ListNotificationConfigsResponse``; indicates that this is - a continuation of a prior ``ListNotificationConfigs`` call, - and that the system should return the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=3, - ) - - -class ListNotificationConfigsResponse(proto.Message): - r"""Response message for listing notification configs. - - Attributes: - notification_configs (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.NotificationConfig]): - Notification configs belonging to the - requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. Name of the organization assets should belong to. - Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following are the allowed field and operator - combinations: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - - The following fields are supported: name update_time - resource_properties security_marks.marks - security_center_properties.resource_name - security_center_properties.resource_display_name - security_center_properties.resource_parent - security_center_properties.resource_parent_display_name - security_center_properties.resource_project - security_center_properties.resource_project_display_name - security_center_properties.resource_type - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetsResult's - "state_change" attribute is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the ListAssetsResult - fields to be listed in the response. - An empty field mask will list all fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1p1beta1.types.Asset): - Asset matching the search request. - state_change (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult.StateChange): - State change of the asset between the points - in time. - """ - class StateChange(proto.Enum): - r"""The change in state of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state change will be: - UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - ADDED (1): - Asset was added between the points in time. - REMOVED (2): - Asset was removed between the points in time. - ACTIVE (3): - Asset was present at both point(s) in time. - """ - UNUSED = 0 - ADDED = 1 - REMOVED = 2 - ACTIVE = 3 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.StateChange', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - - severity: ``=``, ``:`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - security_marks.marks: ``=``, ``:`` source_properties: ``=``, - ``:``, ``>``, ``<``, ``>=``, ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - - The following fields are supported: name parent state - category resource_name event_time source_properties - security_marks.marks - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListFindingsResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added in any state during - the compare_duration period of time that precedes the - read_time. This is the time between (read_time - - compare_duration) and read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the Finding fields to - be listed in the response. An empty field mask - will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - list_findings_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - class ListFindingsResult(proto.Message): - r"""Result containing the Finding and its StateChange. - - Attributes: - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Finding matching the search request. - state_change (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.StateChange): - State change of the finding between the - points in time. - resource (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.Resource): - Output only. Resource that is associated with - this finding. - """ - class StateChange(proto.Enum): - r"""The change in state of the finding. - - When querying across two points in time this describes the change in - the finding between the two points: CHANGED, UNCHANGED, ADDED, or - REMOVED. Findings can not be deleted, so REMOVED implies that the - finding at timestamp does not match the filter specified, but it did - at timestamp - compare_duration. If there was no compare_duration - supplied in the request the state change will be: UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - CHANGED (1): - The finding has changed state in some way - between the points in time and existed at both - points. - UNCHANGED (2): - The finding has not changed state between the - points in time and existed at both points. - ADDED (3): - The finding was created between the points in - time. - REMOVED (4): - The finding at timestamp does not match the filter - specified, but it did at timestamp - compare_duration. - """ - UNUSED = 0 - CHANGED = 1 - UNCHANGED = 2 - ADDED = 3 - REMOVED = 4 - - class Resource(proto.Message): - r"""Information related to the Google Cloud resource that is - associated with this finding. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - project_name (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The human readable name of project that the - resource belongs to. - parent_name (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - project_name: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent_name: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListFindingsResponse.ListFindingsResult.StateChange', - ) - resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( - proto.MESSAGE, - number=3, - message='ListFindingsResponse.ListFindingsResult.Resource', - ) - - @property - def raw_page(self): - return self - - list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListFindingsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The relative resource name of the finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must be alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing source_properties. - Individual source_properties can be added/updated by using - "source_properties." in the field mask. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateNotificationConfigRequest(proto.Message): - r"""Request message for updating a notification config. - - Attributes: - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - notification config. - If empty all mutable fields will be updated. - """ - - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - If empty all mutable fields will be updated. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - If empty all mutable fields will be updated. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If empty - or set to "marks", all marks will be replaced. Individual - marks can be updated using "marks.". - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. If not set uses current server - time. Updates will be applied to the - SecurityMarks that are active immediately - preceding this time. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py deleted file mode 100644 index 05fb8de6..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, etc. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and - outdated/insecure libraries.". - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}", - "folders/{folder_id}/sources/{source_id}" or - "projects/{project_number}/sources/{source_id}", depending - on the closest CRM ancestor of the resource associated with - the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/mypy.ini b/owl-bot-staging/v1p1beta1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1p1beta1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1p1beta1/noxfile.py b/owl-bot-staging/v1p1beta1/noxfile.py deleted file mode 100644 index bc69c724..00000000 --- a/owl-bot-staging/v1p1beta1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1p1beta1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py deleted file mode 100644 index ef2942ac..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 94caafaf..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py deleted file mode 100644 index 612c30b2..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py deleted file mode 100644 index 8ea771f7..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py deleted file mode 100644 index 9c599ff1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py deleted file mode 100644 index 57fc8d29..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py deleted file mode 100644 index 9c019213..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py deleted file mode 100644 index c6749af1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index 52a3b23e..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 492edf74..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py deleted file mode 100644 index 31300fbc..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py deleted file mode 100644 index 7df5d0f5..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index d593432d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index 77db9ca0..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py deleted file mode 100644 index b6408c81..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py deleted file mode 100644 index 89b9154d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py deleted file mode 100644 index 170d9c60..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 0e0f6c95..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py deleted file mode 100644 index d3082c32..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py deleted file mode 100644 index f31156df..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py deleted file mode 100644 index 3e190b23..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 68effc1f..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py deleted file mode 100644 index dadc521c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py deleted file mode 100644 index ad7b5c4c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py deleted file mode 100644 index 520b1905..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py deleted file mode 100644 index c31addea..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py deleted file mode 100644 index 0a8fa68d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py deleted file mode 100644 index 187eaf3a..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index 1f51b6eb..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index b6ccd7af..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index 8248bf7d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index 4c530ca1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index d22f33d1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index a3008967..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index 2f837372..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index d0254a87..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py deleted file mode 100644 index 3d89b4d8..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py deleted file mode 100644 index 568c925c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py deleted file mode 100644 index 8401b510..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py deleted file mode 100644 index 215b8872..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index 2d5a82f3..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index 703bedc5..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 69f8fd59..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index d4649225..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py deleted file mode 100644 index ad60833b..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py deleted file mode 100644 index 22e21644..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json b/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json deleted file mode 100644 index 774592ce..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json +++ /dev/null @@ -1,3808 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1p1beta1", - "version": "v1p1beta1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py b/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py deleted file mode 100644 index c285b274..00000000 --- a/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py +++ /dev/null @@ -1,198 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_notification_config': ('parent', 'config_id', 'notification_config', ), - 'create_source': ('parent', 'source', ), - 'delete_notification_config': ('name', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_notification_config': ('name', ), - 'get_organization_settings': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_notification_configs': ('parent', 'page_token', 'page_size', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_notification_config': ('notification_config', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1p1beta1/setup.py b/owl-bot-staging/v1p1beta1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1p1beta1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/tests/__init__.py b/owl-bot-staging/v1p1beta1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py deleted file mode 100644 index 370aacb7..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py +++ /dev/null @@ -1,14070 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.services.security_center import transports -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - client.create_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_create_notification_config_async_from_dict(): - await test_create_notification_config_async(request_type=dict) - - -def test_create_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - - -def test_create_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - client.delete_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_notification_config_async_from_dict(): - await test_delete_notification_config_async(request_type=dict) - - -def test_delete_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = None - client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - client.get_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_get_notification_config_async_from_dict(): - await test_get_notification_config_async(request_type=dict) - - -def test_get_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = notification_config.NotificationConfig() - client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_assets( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_assets_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_assets_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_assets( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_assets_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - client.list_notification_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - -@pytest.mark.asyncio -async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) - - -def test_list_notification_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_notification_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) -def test_list_notification_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_notification_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_notification_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - client.update_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) - - -def test_update_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -def test_update_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "configId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["configId"] = 'config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "configId" in jsonified_request - assert jsonified_request["configId"] == 'config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_notification_config(request) - - expected_params = [ - ( - "configId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.CreateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_notification_config(request) - - -def test_create_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -def test_create_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_notification_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_notification_config(request) - - -def test_delete_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -def test_delete_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) - - request = securitycenter_service.GetNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() - - client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_notification_config(request) - - -def test_get_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -def test_get_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_assets(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets" % client.transport._host, args[1]) - - -def test_list_assets_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_list_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_notification_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_notification_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_notification_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) - - request = securitycenter_service.ListNotificationConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() - - client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_notification_configs(request) - - -def test_list_notification_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_notification_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_notification_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) - - pages = list(client.list_notification_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.UpdateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_notification_config(request) - - -def test_update_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'create_source', - 'create_finding', - 'create_notification_config', - 'delete_notification_config', - 'get_iam_policy', - 'get_notification_config', - 'get_organization_settings', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_findings', - 'list_notification_configs', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_iam_policy', - 'test_iam_permissions', - 'update_finding', - 'update_notification_config', - 'update_organization_settings', - 'update_source', - 'update_security_marks', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.create_notification_config._session - session2 = client2.transport.create_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_notification_config._session - session2 = client2.transport.delete_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_notification_config._session - session2 = client2.transport.get_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_notification_configs._session - session2 = client2.transport.list_notification_configs._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_notification_config._session - session2 = client2.transport.update_notification_config._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_notification_config_path(): - organization = "scallop" - notification_config = "abalone" - expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - actual = SecurityCenterClient.notification_config_path(organization, notification_config) - assert expected == actual - - -def test_parse_notification_config_path(): - expected = { - "organization": "squid", - "notification_config": "clam", - } - path = SecurityCenterClient.notification_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_notification_config_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "whelk" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "octopus", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "oyster" - asset = "nudibranch" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "cuttlefish", - "asset": "mussel", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "winkle" - source = "nautilus" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "scallop", - "source": "abalone", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_topic_path(): - project = "squid" - topic = "clam" - expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - actual = SecurityCenterClient.topic_path(project, topic) - assert expected == actual - - -def test_parse_topic_path(): - expected = { - "project": "whelk", - "topic": "octopus", - } - path = SecurityCenterClient.topic_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_topic_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nudibranch", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "mussel", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "winkle" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "nautilus", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "scallop" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "abalone", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "squid" - location = "clam" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "whelk", - "location": "octopus", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json index 38463d21..ec678e1a 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { @@ -880,6 +880,175 @@ ], "title": "securitycenter_v1_generated_security_center_create_notification_config_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py" + }, { "canonical": true, "clientMethod": { @@ -1522,19 +1691,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetBigQueryExport" + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1553,22 +1722,21 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" + "shortName": "delete_security_health_analytics_custom_module" }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async", "segments": [ { - "end": 51, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 49, "start": 27, "type": "SHORT" }, @@ -1583,17 +1751,15 @@ "type": "REQUEST_INITIALIZATION" }, { - "end": 48, "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py" }, { "canonical": true, @@ -1602,19 +1768,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetBigQueryExport" + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1633,22 +1799,21 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" + "shortName": "delete_security_health_analytics_custom_module" }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync", "segments": [ { - "end": 51, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 49, "start": 27, "type": "SHORT" }, @@ -1663,17 +1828,15 @@ "type": "REQUEST_INITIALIZATION" }, { - "end": 48, "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py" }, { "canonical": true, @@ -1683,22 +1846,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetIamPolicy" + "shortName": "GetBigQueryExport" }, "parameters": [ { "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" }, { - "name": "resource", + "name": "name", "type": "str" }, { @@ -1714,47 +1877,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", "segments": [ { - "end": 52, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 52, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 41, - "start": 39, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 46, - "start": 42, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 53, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" + "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" }, { "canonical": true, @@ -1763,22 +1926,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetIamPolicy" + "shortName": "GetBigQueryExport" }, "parameters": [ { "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" }, { - "name": "resource", + "name": "name", "type": "str" }, { @@ -1794,47 +1957,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", "segments": [ { - "end": 52, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 52, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 41, - "start": 39, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 46, - "start": 42, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 53, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" + "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" }, { "canonical": true, @@ -1844,19 +2007,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_effective_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetMuteConfig" + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1875,14 +2038,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async", "segments": [ { "end": 51, @@ -1915,7 +2078,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py" }, { "canonical": true, @@ -1924,19 +2087,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_effective_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetMuteConfig" + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1955,14 +2118,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync", "segments": [ { "end": 51, @@ -1995,7 +2158,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py" }, { "canonical": true, @@ -2005,22 +2168,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetNotificationConfig" + "shortName": "GetIamPolicy" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" }, { - "name": "name", + "name": "resource", "type": "str" }, { @@ -2036,47 +2199,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", "segments": [ { - "end": 51, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 40, - "start": 38, + "end": 41, + "start": 39, "type": "CLIENT_INITIALIZATION" }, { - "end": 45, - "start": 41, + "end": 46, + "start": 42, "type": "REQUEST_INITIALIZATION" }, { - "end": 48, - "start": 46, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 53, + "start": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" + "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" }, { "canonical": true, @@ -2085,22 +2248,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetNotificationConfig" + "shortName": "GetIamPolicy" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" }, { - "name": "name", + "name": "resource", "type": "str" }, { @@ -2116,47 +2279,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", "segments": [ { - "end": 51, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 40, - "start": 38, + "end": 41, + "start": 39, "type": "CLIENT_INITIALIZATION" }, { - "end": 45, - "start": 41, + "end": 46, + "start": 42, "type": "REQUEST_INITIALIZATION" }, { - "end": 48, - "start": 46, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 53, + "start": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" + "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" }, { "canonical": true, @@ -2166,19 +2329,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetOrganizationSettings" + "shortName": "GetMuteConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" }, { "name": "name", @@ -2197,14 +2360,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", "segments": [ { "end": 51, @@ -2237,7 +2400,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" + "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" }, { "canonical": true, @@ -2246,19 +2409,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetOrganizationSettings" + "shortName": "GetMuteConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" }, { "name": "name", @@ -2277,14 +2440,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", "segments": [ { "end": 51, @@ -2317,7 +2480,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" + "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" }, { "canonical": true, @@ -2327,19 +2490,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetSource" + "shortName": "GetNotificationConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" }, { "name": "name", @@ -2358,14 +2521,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_async.py", + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", "segments": [ { "end": 51, @@ -2398,7 +2561,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_source_async.py" + "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" }, { "canonical": true, @@ -2407,19 +2570,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetSource" + "shortName": "GetNotificationConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" }, { "name": "name", @@ -2438,14 +2601,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_sync.py", + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", "segments": [ { "end": 51, @@ -2478,7 +2641,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_source_sync.py" + "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" }, { "canonical": true, @@ -2488,19 +2651,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupAssets" + "shortName": "GetOrganizationSettings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" }, { "name": "retry", @@ -2515,22 +2682,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_async.py", + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", "segments": [ { - "end": 53, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 51, "start": 27, "type": "SHORT" }, @@ -2540,22 +2707,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_assets_async.py" + "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" }, { "canonical": true, @@ -2564,19 +2731,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupAssets" + "shortName": "GetOrganizationSettings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" }, { "name": "retry", @@ -2591,22 +2762,900 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", "segments": [ { - "end": 53, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListBigQueryExports" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, "start": 27, "type": "SHORT" }, @@ -2616,51 +3665,127 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" }, { "canonical": true, "clientMethod": { - "async": true, "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupFindings" + "shortName": "ListBigQueryExports" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" }, { "name": "parent", "type": "str" }, { - "name": "group_by", + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_descendant_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", "type": "str" }, { @@ -2676,22 +3801,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_async.py", + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async", "segments": [ { - "end": 53, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 52, "start": 27, "type": "SHORT" }, @@ -2701,22 +3826,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_findings_async.py" + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -2725,28 +3850,24 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_descendant_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupFindings" + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", "type": "str" }, - { - "name": "group_by", - "type": "str" - }, { "name": "retry", "type": "google.api_core.retry.Retry" @@ -2760,22 +3881,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync", "segments": [ { - "end": 53, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 52, "start": 27, "type": "SHORT" }, @@ -2785,22 +3906,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -2810,19 +3931,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_effective_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListAssets" + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -2837,14 +3962,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_effective_security_health_analytics_custom_modules" }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_async.py", + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async", "segments": [ { "end": 52, @@ -2877,7 +4002,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_assets_async.py" + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -2886,19 +4011,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_effective_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListAssets" + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -2913,14 +4042,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_effective_security_health_analytics_custom_modules" }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync", "segments": [ { "end": 52, @@ -2953,7 +4082,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -2963,23 +4092,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListBigQueryExports" + "shortName": "ListFindings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" }, { "name": "retry", @@ -2994,14 +4119,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", - "shortName": "list_big_query_exports" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", + "shortName": "list_findings" }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", "segments": [ { "end": 52, @@ -3034,7 +4159,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" + "title": "securitycenter_v1_generated_security_center_list_findings_async.py" }, { "canonical": true, @@ -3043,23 +4168,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListBigQueryExports" + "shortName": "ListFindings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" }, { "name": "retry", @@ -3074,14 +4195,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", - "shortName": "list_big_query_exports" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", + "shortName": "list_findings" }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", "segments": [ { "end": 52, @@ -3114,7 +4235,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" + "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" }, { "canonical": true, @@ -3124,19 +4245,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListFindings" + "shortName": "ListMuteConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -3151,14 +4276,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", + "shortName": "list_mute_configs" }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_async.py", + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", "segments": [ { "end": 52, @@ -3191,7 +4316,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_findings_async.py" + "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" }, { "canonical": true, @@ -3200,19 +4325,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListFindings" + "shortName": "ListMuteConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -3227,14 +4356,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", + "shortName": "list_mute_configs" }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", "segments": [ { "end": 52, @@ -3267,7 +4396,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" + "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" }, { "canonical": true, @@ -3277,19 +4406,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListMuteConfigs" + "shortName": "ListNotificationConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" }, { "name": "parent", @@ -3308,14 +4437,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", - "shortName": "list_mute_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", + "shortName": "list_notification_configs" }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", "segments": [ { "end": 52, @@ -3348,7 +4477,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" + "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" }, { "canonical": true, @@ -3357,19 +4486,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListMuteConfigs" + "shortName": "ListNotificationConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" }, { "name": "parent", @@ -3388,14 +4517,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", - "shortName": "list_mute_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", + "shortName": "list_notification_configs" }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", "segments": [ { "end": 52, @@ -3428,7 +4557,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" + "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" }, { "canonical": true, @@ -3438,19 +4567,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListNotificationConfigs" + "shortName": "ListSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", @@ -3469,14 +4598,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_security_health_analytics_custom_modules" }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async", "segments": [ { "end": 52, @@ -3509,7 +4638,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -3518,19 +4647,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListNotificationConfigs" + "shortName": "ListSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", @@ -3549,14 +4678,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_security_health_analytics_custom_modules" }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync", "segments": [ { "end": 52, @@ -3589,7 +4718,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -5587,6 +6716,175 @@ ], "title": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json index 40bca2cb..a4c1295e 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json index 6114500d..774592ce 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/scripts/fixup_securitycenter_v1_keywords.py b/scripts/fixup_securitycenter_v1_keywords.py index 3181353e..af2d084d 100644 --- a/scripts/fixup_securitycenter_v1_keywords.py +++ b/scripts/fixup_securitycenter_v1_keywords.py @@ -44,23 +44,30 @@ class securitycenterCallTransformer(cst.CSTTransformer): 'create_finding': ('parent', 'finding_id', 'finding', ), 'create_mute_config': ('parent', 'mute_config', 'mute_config_id', ), 'create_notification_config': ('parent', 'config_id', 'notification_config', ), + 'create_security_health_analytics_custom_module': ('parent', 'security_health_analytics_custom_module', ), 'create_source': ('parent', 'source', ), 'delete_big_query_export': ('name', ), 'delete_mute_config': ('name', ), 'delete_notification_config': ('name', ), + 'delete_security_health_analytics_custom_module': ('name', ), 'get_big_query_export': ('name', ), + 'get_effective_security_health_analytics_custom_module': ('name', ), 'get_iam_policy': ('resource', 'options', ), 'get_mute_config': ('name', ), 'get_notification_config': ('name', ), 'get_organization_settings': ('name', ), + 'get_security_health_analytics_custom_module': ('name', ), 'get_source': ('name', ), 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), 'list_big_query_exports': ('parent', 'page_size', 'page_token', ), + 'list_descendant_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), + 'list_effective_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), 'list_mute_configs': ('parent', 'page_size', 'page_token', ), 'list_notification_configs': ('parent', 'page_token', 'page_size', ), + 'list_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), 'list_sources': ('parent', 'page_token', 'page_size', ), 'run_asset_discovery': ('parent', ), 'set_finding_state': ('name', 'state', 'start_time', ), @@ -73,6 +80,7 @@ class securitycenterCallTransformer(cst.CSTTransformer): 'update_mute_config': ('mute_config', 'update_mask', ), 'update_notification_config': ('notification_config', 'update_mask', ), 'update_organization_settings': ('organization_settings', 'update_mask', ), + 'update_security_health_analytics_custom_module': ('security_health_analytics_custom_module', 'update_mask', ), 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), 'update_source': ('source', 'update_mask', ), } diff --git a/tests/unit/gapic/securitycenter_v1/test_security_center.py b/tests/unit/gapic/securitycenter_v1/test_security_center.py index 0e9185a4..3e941302 100644 --- a/tests/unit/gapic/securitycenter_v1/test_security_center.py +++ b/tests/unit/gapic/securitycenter_v1/test_security_center.py @@ -75,8 +75,14 @@ contact_details, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -85,7 +91,6 @@ label, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -93,6 +98,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import external_system from google.cloud.securitycenter_v1.types import file @@ -1001,6 +1010,327 @@ async def test_bulk_mute_findings_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_create_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +def test_create_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + client.create_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + ) + response = await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async_from_dict(): + await test_create_security_health_analytics_custom_module_async(request_type=dict) + + +def test_create_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_security_health_analytics_custom_module( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) + assert arg == mock_val + + +def test_create_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_security_health_analytics_custom_module( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + @pytest.mark.parametrize( "request_type", [ @@ -1287,6 +1617,7 @@ def test_create_finding(request_type, transport: str = "grpc"): parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) response = client.create_finding(request) @@ -1311,6 +1642,7 @@ def test_create_finding(request_type, transport: str = "grpc"): assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" def test_create_finding_empty_call(): @@ -1362,6 +1694,7 @@ async def test_create_finding_async( parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) ) response = await client.create_finding(request) @@ -1387,6 +1720,7 @@ async def test_create_finding_async( assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio @@ -2599,11 +2933,13 @@ async def test_delete_notification_config_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetBigQueryExportRequest, + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_big_query_export(request_type, transport: str = "grpc"): +def test_delete_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2615,16 +2951,267 @@ def test_get_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.get_big_query_export), "__call__" + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + call.return_value = None + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + client.delete_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async_from_dict(): + await test_delete_security_health_analytics_custom_module_async(request_type=dict) + + +def test_delete_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = None + client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_security_health_analytics_custom_module( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_security_health_analytics_custom_module( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GetBigQueryExportRequest, + dict, + ], +) +def test_get_big_query_export(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", ) response = client.get_big_query_export(request) @@ -3877,11 +4464,13 @@ async def test_get_organization_settings_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetSourceRequest, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_source(request_type, transport: str = "grpc"): +def test_get_effective_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3892,30 +4481,40 @@ def test_get_source(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source( + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", ) - response = client.get_source(request) + response = client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" -def test_get_source_empty_call(): +def test_get_effective_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -3924,17 +4523,23 @@ def test_get_source_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - client.get_source() + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + client.get_effective_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_get_source_async( +async def test_get_effective_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GetSourceRequest, + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3946,51 +4551,72 @@ async def test_get_source_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - source.Source( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", ) ) - response = await client.get_source(request) + response = await client.get_effective_security_health_analytics_custom_module( + request + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) +async def test_get_effective_security_health_analytics_custom_module_async_from_dict(): + await test_get_effective_security_health_analytics_custom_module_async( + request_type=dict + ) -def test_get_source_field_headers(): +def test_get_effective_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - call.return_value = source.Source() - client.get_source(request) + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4006,21 +4632,28 @@ def test_get_source_field_headers(): @pytest.mark.asyncio -async def test_get_source_field_headers_async(): +async def test_get_effective_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + await client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4035,18 +4668,23 @@ async def test_get_source_field_headers_async(): ) in kw["metadata"] -def test_get_source_flattened(): +def test_get_effective_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source() + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.get_source( + client.get_effective_security_health_analytics_custom_module( name="name_value", ) @@ -4059,7 +4697,7 @@ def test_get_source_flattened(): assert arg == mock_val -def test_get_source_flattened_error(): +def test_get_effective_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4067,27 +4705,34 @@ def test_get_source_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) @pytest.mark.asyncio -async def test_get_source_flattened_async(): +async def test_get_effective_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source() + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.get_source( + response = await client.get_effective_security_health_analytics_custom_module( name="name_value", ) @@ -4101,7 +4746,7 @@ async def test_get_source_flattened_async(): @pytest.mark.asyncio -async def test_get_source_flattened_error_async(): +async def test_get_effective_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4109,8 +4754,8 @@ async def test_get_source_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), + await client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) @@ -4118,11 +4763,13 @@ async def test_get_source_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupAssetsRequest, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_group_assets(request_type, transport: str = "grpc"): +def test_get_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4133,26 +4780,43 @@ def test_group_assets(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token="next_page_token_value", - total_size=1086, + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) - response = client.group_assets(request) + response = client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_group_assets_empty_call(): +def test_get_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4161,17 +4825,22 @@ def test_group_assets_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - client.group_assets() + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + client.get_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_group_assets_async( +async def test_get_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GroupAssetsRequest, + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4183,47 +4852,68 @@ async def test_group_assets_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupAssetsResponse( - next_page_token="next_page_token_value", - total_size=1086, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) ) - response = await client.group_assets(request) + response = await client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" @pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) +async def test_get_security_health_analytics_custom_module_async_from_dict(): + await test_get_security_health_analytics_custom_module_async(request_type=dict) -def test_group_assets_field_headers(): +def test_get_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4234,28 +4924,30 @@ def test_group_assets_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_group_assets_field_headers_async(): +async def test_get_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupAssetsResponse() + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - await client.group_assets(request) + await client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4266,206 +4958,108 @@ async def test_group_assets_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] -def test_group_assets_pager(transport_name: str = "grpc"): +def test_get_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_security_health_analytics_custom_module( + name="name_value", ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val -def test_group_assets_pages(transport_name: str = "grpc"): +def test_get_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_group_assets_async_pager(): +async def test_get_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.get_security_health_analytics_custom_module), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Designate an appropriate return value for the call. + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - async_pager = await client.group_assets( - request={}, + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_security_health_analytics_custom_module( + name="name_value", ) - assert async_pager.next_page_token == "abc" - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in responses) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val @pytest.mark.asyncio -async def test_group_assets_async_pages(): +async def test_get_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", ) - pages = [] - async for page_ in ( - await client.group_assets(request={}) - ).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupFindingsRequest, + securitycenter_service.GetSourceRequest, dict, ], ) -def test_group_findings(request_type, transport: str = "grpc"): +def test_get_source(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4476,26 +5070,30 @@ def test_group_findings(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token="next_page_token_value", - total_size=1086, + call.return_value = source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) - response = client.group_findings(request) + response = client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_group_findings_empty_call(): +def test_get_source_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4504,17 +5102,17 @@ def test_group_findings_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - client.group_findings() + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + client.get_source() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() @pytest.mark.asyncio -async def test_group_findings_async( +async def test_get_source_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GroupFindingsRequest, + request_type=securitycenter_service.GetSourceRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4526,47 +5124,51 @@ async def test_group_findings_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse( - next_page_token="next_page_token_value", - total_size=1086, + source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) ) - response = await client.group_findings(request) + response = await client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) +async def test_get_source_async_from_dict(): + await test_get_source_async(request_type=dict) -def test_group_findings_field_headers(): +def test_get_source_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.GetSourceRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + call.return_value = source.Source() + client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4577,28 +5179,26 @@ def test_group_findings_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_group_findings_field_headers_async(): +async def test_get_source_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.GetSourceRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse() - ) - await client.group_findings(request) + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + await client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4609,39 +5209,35 @@ async def test_group_findings_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] -def test_group_findings_flattened(): +def test_get_source_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() + call.return_value = source.Source() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.group_findings( - parent="parent_value", - group_by="group_by_value", + client.get_source( + name="name_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].group_by - mock_val = "group_by_value" + arg = args[0].name + mock_val = "name_value" assert arg == mock_val -def test_group_findings_flattened_error(): +def test_get_source_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4649,48 +5245,41 @@ def test_group_findings_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent="parent_value", - group_by="group_by_value", + client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) @pytest.mark.asyncio -async def test_group_findings_flattened_async(): +async def test_get_source_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() + call.return_value = source.Source() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.group_findings( - parent="parent_value", - group_by="group_by_value", + response = await client.get_source( + name="name_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].group_by - mock_val = "group_by_value" + arg = args[0].name + mock_val = "name_value" assert arg == mock_val @pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): +async def test_get_source_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4698,42 +5287,196 @@ async def test_group_findings_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent="parent_value", - group_by="group_by_value", + await client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) -def test_group_findings_pager(transport_name: str = "grpc"): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GroupAssetsRequest, + dict, + ], +) +def test_group_assets(request_type, transport: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token="def", + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, + ) + response = client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 + + +def test_group_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + client.group_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + +@pytest.mark.asyncio +async def test_group_assets_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.GroupAssetsRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, + ) + ) + response = await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_assets_async_from_dict(): + await test_group_assets_async(request_type=dict) + + +def test_group_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + call.return_value = securitycenter_service.GroupAssetsResponse() + client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_group_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupAssetsResponse() + ) + await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_group_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4746,7 +5489,7 @@ def test_group_findings_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.group_findings(request={}) + pager = client.group_assets(request={}) assert pager._metadata == metadata @@ -4755,17 +5498,17 @@ def test_group_findings_pager(transport_name: str = "grpc"): assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): +def test_group_assets_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4773,17 +5516,17 @@ def test_group_findings_pages(transport_name: str = "grpc"): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4791,24 +5534,24 @@ def test_group_findings_pages(transport_name: str = "grpc"): ), RuntimeError, ) - pages = list(client.group_findings(request={}).pages) + pages = list(client.group_assets(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_group_findings_async_pager(): +async def test_group_assets_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4816,17 +5559,17 @@ async def test_group_findings_async_pager(): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4834,7 +5577,7 @@ async def test_group_findings_async_pager(): ), RuntimeError, ) - async_pager = await client.group_findings( + async_pager = await client.group_assets( request={}, ) assert async_pager.next_page_token == "abc" @@ -4847,18 +5590,18 @@ async def test_group_findings_async_pager(): @pytest.mark.asyncio -async def test_group_findings_async_pages(): +async def test_group_assets_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4866,17 +5609,17 @@ async def test_group_findings_async_pages(): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4886,7 +5629,7 @@ async def test_group_findings_async_pages(): ) pages = [] async for page_ in ( - await client.group_findings(request={}) + await client.group_assets(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -4896,11 +5639,11 @@ async def test_group_findings_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListAssetsRequest, + securitycenter_service.GroupFindingsRequest, dict, ], ) -def test_list_assets(request_type, transport: str = "grpc"): +def test_group_findings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4911,26 +5654,26 @@ def test_list_assets(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( + call.return_value = securitycenter_service.GroupFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) - response = client.list_assets(request) + response = client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) + assert isinstance(response, pagers.GroupFindingsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_list_assets_empty_call(): +def test_group_findings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4939,17 +5682,17 @@ def test_list_assets_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: - client.list_assets() + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + client.group_findings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() @pytest.mark.asyncio -async def test_list_assets_async( +async def test_group_findings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListAssetsRequest, + request_type=securitycenter_service.GroupFindingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4961,47 +5704,47 @@ async def test_list_assets_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListAssetsResponse( + securitycenter_service.GroupFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) ) - response = await client.list_assets(request) + response = await client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) + assert isinstance(response, pagers.GroupFindingsAsyncPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) +async def test_group_findings_async_from_dict(): + await test_group_findings_async(request_type=dict) -def test_list_assets_field_headers(): +def test_group_findings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.GroupFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + call.return_value = securitycenter_service.GroupFindingsResponse() + client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5017,23 +5760,23 @@ def test_list_assets_field_headers(): @pytest.mark.asyncio -async def test_list_assets_field_headers_async(): +async def test_group_findings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.GroupFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListAssetsResponse() + securitycenter_service.GroupFindingsResponse() ) - await client.list_assets(request) + await client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5048,38 +5791,130 @@ async def test_list_assets_field_headers_async(): ) in kw["metadata"] -def test_list_assets_pager(transport_name: str = "grpc"): +def test_group_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.group_findings( + parent="parent_value", + group_by="group_by_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].group_by + mock_val = "group_by_value" + assert arg == mock_val + + +def test_group_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", + ) + + +@pytest.mark.asyncio +async def test_group_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupFindingsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.group_findings( + parent="parent_value", + group_by="group_by_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].group_by + mock_val = "group_by_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_group_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", + ) + + +def test_group_findings_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, @@ -5089,98 +5924,95 @@ def test_list_assets_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_assets(request={}) + pager = client.group_findings(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results - ) + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): +def test_group_findings_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) - pages = list(client.list_assets(request={}).pages) + pages = list(client.group_findings(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_assets_async_pager(): +async def test_group_findings_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) - async_pager = await client.list_assets( + async_pager = await client.group_findings( request={}, ) assert async_pager.next_page_token == "abc" @@ -5189,53 +6021,50 @@ async def test_list_assets_async_pager(): responses.append(response) assert len(responses) == 6 - assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses - ) + assert all(isinstance(i, securitycenter_service.GroupResult) for i in responses) @pytest.mark.asyncio -async def test_list_assets_async_pages(): +async def test_group_findings_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_assets(request={}) + await client.group_findings(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -5245,11 +6074,11 @@ async def test_list_assets_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListFindingsRequest, + securitycenter_service.ListAssetsRequest, dict, ], ) -def test_list_findings(request_type, transport: str = "grpc"): +def test_list_assets(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5260,26 +6089,26 @@ def test_list_findings(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( + call.return_value = securitycenter_service.ListAssetsResponse( next_page_token="next_page_token_value", total_size=1086, ) - response = client.list_findings(request) + response = client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) + assert isinstance(response, pagers.ListAssetsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_list_findings_empty_call(): +def test_list_assets_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -5288,17 +6117,17 @@ def test_list_findings_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: - client.list_findings() + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + client.list_assets() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() @pytest.mark.asyncio -async def test_list_findings_async( +async def test_list_assets_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListFindingsRequest, + request_type=securitycenter_service.ListAssetsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5310,47 +6139,47 @@ async def test_list_findings_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListFindingsResponse( + securitycenter_service.ListAssetsResponse( next_page_token="next_page_token_value", total_size=1086, ) ) - response = await client.list_findings(request) + response = await client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) + assert isinstance(response, pagers.ListAssetsAsyncPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) +async def test_list_assets_async_from_dict(): + await test_list_assets_async(request_type=dict) -def test_list_findings_field_headers(): +def test_list_assets_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() + request = securitycenter_service.ListAssetsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + call.return_value = securitycenter_service.ListAssetsResponse() + client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5366,23 +6195,23 @@ def test_list_findings_field_headers(): @pytest.mark.asyncio -async def test_list_findings_field_headers_async(): +async def test_list_assets_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() + request = securitycenter_service.ListAssetsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListFindingsResponse() + securitycenter_service.ListAssetsResponse() ) - await client.list_findings(request) + await client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5397,38 +6226,38 @@ async def test_list_findings_field_headers_async(): ) in kw["metadata"] -def test_list_findings_pager(transport_name: str = "grpc"): +def test_list_assets_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, @@ -5438,100 +6267,98 @@ def test_list_findings_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_findings(request={}) + pager = client.list_assets(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 assert all( - isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult - ) + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) for i in results ) -def test_list_findings_pages(transport_name: str = "grpc"): +def test_list_assets_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) - pages = list(client.list_findings(request={}).pages) + pages = list(client.list_assets(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_findings_async_pager(): +async def test_list_assets_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) - async_pager = await client.list_findings( + async_pager = await client.list_assets( request={}, ) assert async_pager.next_page_token == "abc" @@ -5541,54 +6368,52 @@ async def test_list_findings_async_pager(): assert len(responses) == 6 assert all( - isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult - ) + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) for i in responses ) @pytest.mark.asyncio -async def test_list_findings_async_pages(): +async def test_list_assets_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_findings(request={}) + await client.list_assets(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -5598,11 +6423,13 @@ async def test_list_findings_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListMuteConfigsRequest, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_mute_configs(request_type, transport: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5614,25 +6441,33 @@ def test_list_mute_configs(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse( + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", ) - response = client.list_mute_configs(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager + ) assert response.next_page_token == "next_page_token_value" -def test_list_mute_configs_empty_call(): +def test_list_descendant_security_health_analytics_custom_modules_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -5642,18 +6477,22 @@ def test_list_mute_configs_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: - client.list_mute_configs() + client.list_descendant_security_health_analytics_custom_modules() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_list_mute_configs_async( +async def test_list_descendant_security_health_analytics_custom_modules_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListMuteConfigsRequest, + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5666,48 +6505,65 @@ async def test_list_mute_configs_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", ) ) - response = await client.list_mute_configs(request) + response = ( + await client.list_descendant_security_health_analytics_custom_modules( + request + ) + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsAsyncPager) + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager + ) assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_list_mute_configs_async_from_dict(): - await test_list_mute_configs_async(request_type=dict) +async def test_list_descendant_security_health_analytics_custom_modules_async_from_dict(): + await test_list_descendant_security_health_analytics_custom_modules_async( + request_type=dict + ) -def test_list_mute_configs_field_headers(): +def test_list_descendant_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = securitycenter_service.ListMuteConfigsResponse() - client.list_mute_configs(request) + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_descendant_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5723,25 +6579,28 @@ def test_list_mute_configs_field_headers(): @pytest.mark.asyncio -async def test_list_mute_configs_field_headers_async(): +async def test_list_descendant_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse() + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() ) - await client.list_mute_configs(request) + await client.list_descendant_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5756,20 +6615,23 @@ async def test_list_mute_configs_field_headers_async(): ) in kw["metadata"] -def test_list_mute_configs_flattened(): +def test_list_descendant_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_mute_configs( + client.list_descendant_security_health_analytics_custom_modules( parent="parent_value", ) @@ -5782,7 +6644,7 @@ def test_list_mute_configs_flattened(): assert arg == mock_val -def test_list_mute_configs_flattened_error(): +def test_list_descendant_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -5790,32 +6652,37 @@ def test_list_mute_configs_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_list_mute_configs_flattened_async(): +async def test_list_descendant_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse() + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_mute_configs( - parent="parent_value", + response = ( + await client.list_descendant_security_health_analytics_custom_modules( + parent="parent_value", + ) ) # Establish that the underlying call was made with the expected @@ -5828,7 +6695,7 @@ async def test_list_mute_configs_flattened_async(): @pytest.mark.asyncio -async def test_list_mute_configs_flattened_error_async(): +async def test_list_descendant_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -5836,13 +6703,15 @@ async def test_list_mute_configs_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + await client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) -def test_list_mute_configs_pager(transport_name: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, @@ -5850,32 +6719,33 @@ def test_list_mute_configs_pager(transport_name: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, @@ -5885,16 +6755,26 @@ def test_list_mute_configs_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_mute_configs(request={}) + pager = client.list_descendant_security_health_analytics_custom_modules( + request={} + ) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in results) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) -def test_list_mute_configs_pages(transport_name: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, @@ -5902,83 +6782,90 @@ def test_list_mute_configs_pages(transport_name: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) - pages = list(client.list_mute_configs(request={}).pages) + pages = list( + client.list_descendant_security_health_analytics_custom_modules( + request={} + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_mute_configs_async_pager(): +async def test_list_descendant_security_health_analytics_custom_modules_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), + type(client.transport.list_descendant_security_health_analytics_custom_modules), "__call__", new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) - async_pager = await client.list_mute_configs( - request={}, + async_pager = ( + await client.list_descendant_security_health_analytics_custom_modules( + request={}, + ) ) assert async_pager.next_page_token == "abc" responses = [] @@ -5986,52 +6873,60 @@ async def test_list_mute_configs_async_pager(): responses.append(response) assert len(responses) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in responses) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) @pytest.mark.asyncio -async def test_list_mute_configs_async_pages(): +async def test_list_descendant_security_health_analytics_custom_modules_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), + type(client.transport.list_descendant_security_health_analytics_custom_modules), "__call__", new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_mute_configs(request={}) + await client.list_descendant_security_health_analytics_custom_modules( + request={} + ) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6041,11 +6936,11 @@ async def test_list_mute_configs_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListNotificationConfigsRequest, + securitycenter_service.ListFindingsRequest, dict, ], ) -def test_list_notification_configs(request_type, transport: str = "grpc"): +def test_list_findings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6056,26 +6951,26 @@ def test_list_notification_configs(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( + call.return_value = securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", + total_size=1086, ) - response = client.list_notification_configs(request) + response = client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) + assert isinstance(response, pagers.ListFindingsPager) assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_list_notification_configs_empty_call(): +def test_list_findings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6084,19 +6979,17 @@ def test_list_notification_configs_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - client.list_notification_configs() + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + client.list_findings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() @pytest.mark.asyncio -async def test_list_notification_configs_async( +async def test_list_findings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListNotificationConfigsRequest, + request_type=securitycenter_service.ListFindingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6108,49 +7001,47 @@ async def test_list_notification_configs_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse( + securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", + total_size=1086, ) ) - response = await client.list_notification_configs(request) + response = await client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert isinstance(response, pagers.ListFindingsAsyncPager) assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) +async def test_list_findings_async_from_dict(): + await test_list_findings_async(request_type=dict) -def test_list_notification_configs_field_headers(): +def test_list_findings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + call.return_value = securitycenter_service.ListFindingsResponse() + client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -6166,25 +7057,23 @@ def test_list_notification_configs_field_headers(): @pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): +async def test_list_findings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse() + securitycenter_service.ListFindingsResponse() ) - await client.list_notification_configs(request) + await client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -6199,230 +7088,141 @@ async def test_list_notification_configs_field_headers_async(): ) in kw["metadata"] -def test_list_notification_configs_flattened(): +def test_list_findings_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent="parent_value", + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token="abc", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token="def", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, ) - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_findings(request={}) -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) + assert pager._metadata == metadata - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent="parent_value", + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in results ) -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse() - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent="parent_value", - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent="parent_value", - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token="abc", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token="def", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all( - isinstance(i, notification_config.NotificationConfig) for i in results - ) - - -def test_list_notification_configs_pages(transport_name: str = "grpc"): +def test_list_findings_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) - pages = list(client.list_notification_configs(request={}).pages) + pages = list(client.list_findings(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): +async def test_list_findings_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_notification_configs), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) - async_pager = await client.list_notification_configs( + async_pager = await client.list_findings( request={}, ) assert async_pager.next_page_token == "abc" @@ -6432,53 +7232,54 @@ async def test_list_notification_configs_async_pager(): assert len(responses) == 6 assert all( - isinstance(i, notification_config.NotificationConfig) for i in responses + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in responses ) @pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): +async def test_list_findings_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_notification_configs), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_notification_configs(request={}) + await client.list_findings(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6488,11 +7289,11 @@ async def test_list_notification_configs_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListSourcesRequest, + securitycenter_service.ListMuteConfigsRequest, dict, ], ) -def test_list_sources(request_type, transport: str = "grpc"): +def test_list_mute_configs(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6503,24 +7304,26 @@ def test_list_sources(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( + call.return_value = securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", ) - response = client.list_sources(request) + response = client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) + assert isinstance(response, pagers.ListMuteConfigsPager) assert response.next_page_token == "next_page_token_value" -def test_list_sources_empty_call(): +def test_list_mute_configs_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6529,17 +7332,19 @@ def test_list_sources_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: - client.list_sources() + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: + client.list_mute_configs() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() @pytest.mark.asyncio -async def test_list_sources_async( +async def test_list_mute_configs_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListSourcesRequest, + request_type=securitycenter_service.ListMuteConfigsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6551,45 +7356,49 @@ async def test_list_sources_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse( + securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", ) ) - response = await client.list_sources(request) + response = await client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) + assert isinstance(response, pagers.ListMuteConfigsAsyncPager) assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) +async def test_list_mute_configs_async_from_dict(): + await test_list_mute_configs_async(request_type=dict) -def test_list_sources_field_headers(): +def test_list_mute_configs_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.ListMuteConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: + call.return_value = securitycenter_service.ListMuteConfigsResponse() + client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -6605,23 +7414,25 @@ def test_list_sources_field_headers(): @pytest.mark.asyncio -async def test_list_sources_field_headers_async(): +async def test_list_mute_configs_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.ListMuteConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse() + securitycenter_service.ListMuteConfigsResponse() ) - await client.list_sources(request) + await client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -6636,18 +7447,20 @@ async def test_list_sources_field_headers_async(): ) in kw["metadata"] -def test_list_sources_flattened(): +def test_list_mute_configs_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() + call.return_value = securitycenter_service.ListMuteConfigsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_sources( + client.list_mute_configs( parent="parent_value", ) @@ -6660,7 +7473,7 @@ def test_list_sources_flattened(): assert arg == mock_val -def test_list_sources_flattened_error(): +def test_list_mute_configs_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -6668,29 +7481,31 @@ def test_list_sources_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_list_sources_flattened_async(): +async def test_list_mute_configs_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() + call.return_value = securitycenter_service.ListMuteConfigsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse() + securitycenter_service.ListMuteConfigsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_sources( + response = await client.list_mute_configs( parent="parent_value", ) @@ -6704,7 +7519,7 @@ async def test_list_sources_flattened_async(): @pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): +async def test_list_mute_configs_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -6712,44 +7527,46 @@ async def test_list_sources_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), + await client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", ) -def test_list_sources_pager(transport_name: str = "grpc"): +def test_list_mute_configs_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, @@ -6759,95 +7576,99 @@ def test_list_sources_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_sources(request={}) + pager = client.list_mute_configs(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all(isinstance(i, source.Source) for i in results) + assert all(isinstance(i, mute_config.MuteConfig) for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): +def test_list_mute_configs_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) - pages = list(client.list_sources(request={}).pages) + pages = list(client.list_mute_configs(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_sources_async_pager(): +async def test_list_mute_configs_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_mute_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) - async_pager = await client.list_sources( + async_pager = await client.list_mute_configs( request={}, ) assert async_pager.next_page_token == "abc" @@ -6856,50 +7677,52 @@ async def test_list_sources_async_pager(): responses.append(response) assert len(responses) == 6 - assert all(isinstance(i, source.Source) for i in responses) + assert all(isinstance(i, mute_config.MuteConfig) for i in responses) @pytest.mark.asyncio -async def test_list_sources_async_pages(): +async def test_list_mute_configs_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_mute_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_sources(request={}) + await client.list_mute_configs(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6909,11 +7732,11 @@ async def test_list_sources_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, + securitycenter_service.ListNotificationConfigsRequest, dict, ], ) -def test_run_asset_discovery(request_type, transport: str = "grpc"): +def test_list_notification_configs(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6925,22 +7748,25 @@ def test_run_asset_discovery(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/spam") - response = client.run_asset_discovery(request) + call.return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token="next_page_token_value", + ) + response = client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == "next_page_token_value" -def test_run_asset_discovery_empty_call(): +def test_list_notification_configs_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6950,18 +7776,18 @@ def test_run_asset_discovery_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - client.run_asset_discovery() + client.list_notification_configs() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() @pytest.mark.asyncio -async def test_run_asset_discovery_async( +async def test_list_notification_configs_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.RunAssetDiscoveryRequest, + request_type=securitycenter_service.ListNotificationConfigsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6974,45 +7800,48 @@ async def test_run_asset_discovery_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/spam") + securitycenter_service.ListNotificationConfigsResponse( + next_page_token="next_page_token_value", + ) ) - response = await client.run_asset_discovery(request) + response = await client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) + assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) +async def test_list_notification_configs_async_from_dict(): + await test_list_notification_configs_async(request_type=dict) -def test_run_asset_discovery_field_headers(): +def test_list_notification_configs_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.ListNotificationConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - call.return_value = operations_pb2.Operation(name="operations/op") - client.run_asset_discovery(request) + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7028,25 +7857,25 @@ def test_run_asset_discovery_field_headers(): @pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): +async def test_list_notification_configs_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.ListNotificationConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/op") + securitycenter_service.ListNotificationConfigsResponse() ) - await client.run_asset_discovery(request) + await client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7061,20 +7890,20 @@ async def test_run_asset_discovery_field_headers_async(): ) in kw["metadata"] -def test_run_asset_discovery_flattened(): +def test_list_notification_configs_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/op") + call.return_value = securitycenter_service.ListNotificationConfigsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.run_asset_discovery( + client.list_notification_configs( parent="parent_value", ) @@ -7087,7 +7916,7 @@ def test_run_asset_discovery_flattened(): assert arg == mock_val -def test_run_asset_discovery_flattened_error(): +def test_list_notification_configs_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7095,31 +7924,31 @@ def test_run_asset_discovery_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): +async def test_list_notification_configs_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/op") + call.return_value = securitycenter_service.ListNotificationConfigsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/spam") + securitycenter_service.ListNotificationConfigsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.run_asset_discovery( + response = await client.list_notification_configs( parent="parent_value", ) @@ -7133,7 +7962,7 @@ async def test_run_asset_discovery_flattened_async(): @pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): +async def test_list_notification_configs_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7141,177 +7970,354 @@ async def test_run_asset_discovery_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), + await client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.SetFindingStateRequest, - dict, - ], -) -def test_set_finding_state(request_type, transport: str = "grpc"): +def test_list_notification_configs_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, ) - response = client.set_finding_state(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_notification_configs(request={}) - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance(i, notification_config.NotificationConfig) for i in results + ) -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. +def test_list_notification_configs_pages(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = list(client.list_notification_configs(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_set_finding_state_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.SetFindingStateRequest, -): +async def test_list_notification_configs_async_pager(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", - ) + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, ) - response = await client.set_finding_state(request) + async_pager = await client.list_notification_configs( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + assert len(responses) == 6 + assert all( + isinstance(i, notification_config.NotificationConfig) for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_notification_configs(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ], +) +def test_list_effective_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager + ) + assert response.next_page_token == "next_page_token_value" + + +def test_list_effective_security_health_analytics_custom_modules_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + client.list_effective_security_health_analytics_custom_modules() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) +async def test_list_effective_security_health_analytics_custom_modules_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_effective_security_health_analytics_custom_modules( + request + ) -def test_set_finding_state_field_headers(): + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager + ) + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_from_dict(): + await test_list_effective_security_health_analytics_custom_modules_async( + request_type=dict + ) + + +def test_list_effective_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = finding.Finding() - client.set_finding_state(request) + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_effective_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7322,28 +8328,33 @@ def test_set_finding_state_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): +async def test_list_effective_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + await client.list_effective_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7354,45 +8365,40 @@ async def test_set_finding_state_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_finding_state_flattened(): +def test_list_effective_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_finding_state( - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + client.list_effective_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( - seconds=751 - ) -def test_set_finding_state_flattened_error(): +def test_list_effective_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7400,53 +8406,48 @@ def test_set_finding_state_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): +async def test_list_effective_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_finding_state( - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + response = await client.list_effective_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( - seconds=751 - ) @pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): +async def test_list_effective_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7454,76 +8455,281 @@ async def test_set_finding_state_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + await client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.SetMuteRequest, - dict, - ], -) -def test_set_mute(request_type, transport: str = "grpc"): +def test_list_effective_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, ) - response = client.set_mute(request) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_effective_security_health_analytics_custom_modules( + request={} + ) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + +def test_list_effective_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list( + client.list_effective_security_health_analytics_custom_modules( + request={} + ).pages + ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = ( + await client.list_effective_security_health_analytics_custom_modules( + request={}, + ) + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all( + isinstance( + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_effective_security_health_analytics_custom_modules( + request={} + ) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ], +) +def test_list_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + ) + response = client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == "next_page_token_value" -def test_set_mute_empty_call(): +def test_list_security_health_analytics_custom_modules_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -7532,16 +8738,22 @@ def test_set_mute_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - client.set_mute() + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + client.list_security_health_analytics_custom_modules() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_set_mute_async( - transport: str = "grpc_asyncio", request_type=securitycenter_service.SetMuteRequest +async def test_list_security_health_analytics_custom_modules_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7553,71 +8765,56 @@ async def test_set_mute_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", ) ) - response = await client.set_mute(request) + response = await client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance( + response, pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager + ) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_set_mute_async_from_dict(): - await test_set_mute_async(request_type=dict) +async def test_list_security_health_analytics_custom_modules_async_from_dict(): + await test_list_security_health_analytics_custom_modules_async(request_type=dict) -def test_set_mute_field_headers(): +def test_list_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - call.return_value = finding.Finding() - client.set_mute(request) + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7628,26 +8825,30 @@ def test_set_mute_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_mute_field_headers_async(): +async def test_list_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_mute(request) + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + await client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7658,39 +8859,39 @@ async def test_set_mute_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_mute_flattened(): +def test_list_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_mute( - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.list_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_set_mute_flattened_error(): +def test_list_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7698,46 +8899,47 @@ def test_set_mute_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_mute_flattened_async(): +async def test_list_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_mute( - name="name_value", - mute=finding.Finding.Mute.MUTED, + response = await client.list_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_set_mute_flattened_error_async(): +async def test_list_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7745,21 +8947,234 @@ async def test_set_mute_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + await client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", + ) + + +def test_list_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_security_health_analytics_custom_modules(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + +def test_list_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list( + client.list_security_health_analytics_custom_modules(request={}).pages ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_security_health_analytics_custom_modules( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_security_health_analytics_custom_modules(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.SetIamPolicyRequest, + securitycenter_service.ListSourcesRequest, dict, ], ) -def test_set_iam_policy(request_type, transport: str = "grpc"): +def test_list_sources(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7770,26 +9185,24 @@ def test_set_iam_policy(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + call.return_value = securitycenter_service.ListSourcesResponse( + next_page_token="next_page_token_value", ) - response = client.set_iam_policy(request) + response = client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == "next_page_token_value" -def test_set_iam_policy_empty_call(): +def test_list_sources_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -7798,16 +9211,17 @@ def test_set_iam_policy_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - client.set_iam_policy() + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + client.list_sources() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() @pytest.mark.asyncio -async def test_set_iam_policy_async( - transport: str = "grpc_asyncio", request_type=iam_policy_pb2.SetIamPolicyRequest +async def test_list_sources_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListSourcesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7819,47 +9233,45 @@ async def test_set_iam_policy_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - policy_pb2.Policy( - version=774, - etag=b"etag_blob", + securitycenter_service.ListSourcesResponse( + next_page_token="next_page_token_value", ) ) - response = await client.set_iam_policy(request) + response = await client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, pagers.ListSourcesAsyncPager) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) +async def test_list_sources_async_from_dict(): + await test_list_sources_async(request_type=dict) -def test_set_iam_policy_field_headers(): +def test_list_sources_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() + request = securitycenter_service.ListSourcesRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + call.return_value = securitycenter_service.ListSourcesResponse() + client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7870,26 +9282,28 @@ def test_set_iam_policy_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): +async def test_list_sources_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() + request = securitycenter_service.ListSourcesRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSourcesResponse() + ) + await client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7900,53 +9314,35 @@ async def test_set_iam_policy_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy( - request={ - "resource": "resource_value", - "policy": policy_pb2.Policy(version=774), - "update_mask": field_mask_pb2.FieldMask(paths=["paths_value"]), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): +def test_list_sources_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() + call.return_value = securitycenter_service.ListSourcesResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_iam_policy( - resource="resource_value", + client.list_sources( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_set_iam_policy_flattened_error(): +def test_list_sources_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7954,41 +9350,43 @@ def test_set_iam_policy_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource="resource_value", + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): +async def test_list_sources_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() + call.return_value = securitycenter_service.ListSourcesResponse() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSourcesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource="resource_value", + response = await client.list_sources( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): +async def test_list_sources_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7996,125 +9394,307 @@ async def test_set_iam_policy_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource="resource_value", + await client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, - ], -) -def test_test_iam_permissions(request_type, transport: str = "grpc"): +def test_list_sources_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, ) - response = client.test_iam_permissions(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_sources(request={}) - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) for i in results) -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. +def test_list_sources_pages(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = list(client.list_sources(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_test_iam_permissions_async( - transport: str = "grpc_asyncio", - request_type=iam_policy_pb2.TestIamPermissionsRequest, -): +async def test_list_sources_async_pager(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock ) as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], - ) + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, ) - response = await client.test_iam_permissions(request) + async_pager = await client.list_sources( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, source.Source) for i in responses) + + +@pytest.mark.asyncio +async def test_list_sources_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_sources(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, + ], +) +def test_run_asset_discovery(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_run_asset_discovery_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + client.run_asset_discovery() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + +@pytest.mark.asyncio +async def test_run_asset_discovery_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.RunAssetDiscoveryRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, future.Future) @pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) +async def test_run_asset_discovery_async_from_dict(): + await test_run_asset_discovery_async(request_type=dict) -def test_test_iam_permissions_field_headers(): +def test_run_asset_discovery_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) + call.return_value = operations_pb2.Operation(name="operations/op") + client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8125,30 +9705,30 @@ def test_test_iam_permissions_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): +async def test_run_asset_discovery_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse() + operations_pb2.Operation(name="operations/op") ) - await client.test_iam_permissions(request) + await client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8159,60 +9739,37 @@ async def test_test_iam_permissions_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions( - request={ - "resource": "resource_value", - "permissions": ["permissions_value"], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): +def test_run_asset_discovery_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + call.return_value = operations_pb2.Operation(name="operations/op") # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.test_iam_permissions( - resource="resource_value", - permissions=["permissions_value"], + client.run_asset_discovery( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" - assert arg == mock_val - arg = args[0].permissions - mock_val = ["permissions_value"] + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_test_iam_permissions_flattened_error(): +def test_run_asset_discovery_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8220,50 +9777,45 @@ def test_test_iam_permissions_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): +async def test_run_asset_discovery_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + call.return_value = operations_pb2.Operation(name="operations/op") call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse() + operations_pb2.Operation(name="operations/spam") ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource="resource_value", - permissions=["permissions_value"], + response = await client.run_asset_discovery( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" - assert arg == mock_val - arg = args[0].permissions - mock_val = ["permissions_value"] + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): +async def test_run_asset_discovery_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8271,21 +9823,20 @@ async def test_test_iam_permissions_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + await client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent="parent_value", ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateExternalSystemRequest, + securitycenter_service.SetFindingStateRequest, dict, ], ) -def test_update_external_system(request_type, transport: str = "grpc"): +def test_set_finding_state(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8297,31 +9848,53 @@ def test_update_external_system(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem( + call.return_value = finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_external_system(request) + response = client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_external_system_empty_call(): +def test_set_finding_state_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8331,18 +9904,18 @@ def test_update_external_system_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - client.update_external_system() + client.set_finding_state() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() @pytest.mark.asyncio -async def test_update_external_system_async( +async def test_set_finding_state_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateExternalSystemRequest, + request_type=securitycenter_service.SetFindingStateRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8355,54 +9928,76 @@ async def test_update_external_system_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem( + finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_external_system(request) + response = await client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_external_system_async_from_dict(): - await test_update_external_system_async(request_type=dict) +async def test_set_finding_state_async_from_dict(): + await test_set_finding_state_async(request_type=dict) -def test_update_external_system_field_headers(): +def test_set_finding_state_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() + request = securitycenter_service.SetFindingStateRequest() - request.external_system.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - call.return_value = gcs_external_system.ExternalSystem() - client.update_external_system(request) + call.return_value = finding.Finding() + client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8413,30 +10008,28 @@ def test_update_external_system_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "external_system.name=name_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_external_system_field_headers_async(): +async def test_set_finding_state_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() + request = securitycenter_service.SetFindingStateRequest() - request.external_system.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem() - ) - await client.update_external_system(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8447,41 +10040,45 @@ async def test_update_external_system_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "external_system.name=name_value", + "name=name_value", ) in kw["metadata"] -def test_update_external_system_flattened(): +def test_set_finding_state_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() + call.return_value = finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_finding_state( + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name="name_value") + arg = args[0].name + mock_val = "name_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( + seconds=751 + ) -def test_update_external_system_flattened_error(): +def test_set_finding_state_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8489,50 +10086,53 @@ def test_update_external_system_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) @pytest.mark.asyncio -async def test_update_external_system_flattened_async(): +async def test_set_finding_state_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() + call.return_value = finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.set_finding_state( + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name="name_value") + arg = args[0].name + mock_val = "name_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( + seconds=751 + ) @pytest.mark.asyncio -async def test_update_external_system_flattened_error_async(): +async def test_set_finding_state_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8540,21 +10140,22 @@ async def test_update_external_system_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateFindingRequest, + securitycenter_service.SetMuteRequest, dict, ], ) -def test_update_finding(request_type, transport: str = "grpc"): +def test_set_mute(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8565,50 +10166,52 @@ def test_update_finding(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( + call.return_value = finding.Finding( name="name_value", parent="parent_value", resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, + state=finding.Finding.State.ACTIVE, category="category_value", external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, + severity=finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, mute_initiator="mute_initiator_value", parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_finding(request) + response = client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) + assert isinstance(response, finding.Finding) assert response.name == "name_value" assert response.parent == "parent_value" assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.state == finding.Finding.State.ACTIVE assert response.category == "category_value" assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.severity == finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT assert response.mute_initiator == "mute_initiator_value" assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_finding_empty_call(): +def test_set_mute_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8617,17 +10220,16 @@ def test_update_finding_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - client.update_finding() + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + client.set_mute() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() @pytest.mark.asyncio -async def test_update_finding_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateFindingRequest, +async def test_set_mute_async( + transport: str = "grpc_asyncio", request_type=securitycenter_service.SetMuteRequest ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8639,71 +10241,73 @@ async def test_update_finding_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_finding.Finding( + finding.Finding( name="name_value", parent="parent_value", resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, + state=finding.Finding.State.ACTIVE, category="category_value", external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, + severity=finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, mute_initiator="mute_initiator_value", parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_finding(request) + response = await client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) + assert isinstance(response, finding.Finding) assert response.name == "name_value" assert response.parent == "parent_value" assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.state == finding.Finding.State.ACTIVE assert response.category == "category_value" assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.severity == finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT assert response.mute_initiator == "mute_initiator_value" assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) +async def test_set_mute_async_from_dict(): + await test_set_mute_async(request_type=dict) -def test_update_finding_field_headers(): +def test_set_mute_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() + request = securitycenter_service.SetMuteRequest() - request.finding.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + call.return_value = finding.Finding() + client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8714,26 +10318,26 @@ def test_update_finding_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "finding.name=name_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_finding_field_headers_async(): +async def test_set_mute_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() + request = securitycenter_service.SetMuteRequest() - request.finding.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8744,35 +10348,39 @@ async def test_update_finding_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "finding.name=name_value", + "name=name_value", ) in kw["metadata"] -def test_update_finding_flattened(): +def test_set_mute_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() + call.return_value = finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name="name_value"), + client.set_mute( + name="name_value", + mute=finding.Finding.Mute.MUTED, ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name="name_value") + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED assert arg == mock_val -def test_update_finding_flattened_error(): +def test_set_mute_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8780,41 +10388,46 @@ def test_update_finding_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + client.set_mute( + securitycenter_service.SetMuteRequest(), + name="name_value", + mute=finding.Finding.Mute.MUTED, ) @pytest.mark.asyncio -async def test_update_finding_flattened_async(): +async def test_set_mute_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() + call.return_value = finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name="name_value"), + response = await client.set_mute( + name="name_value", + mute=finding.Finding.Mute.MUTED, ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name="name_value") + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED assert arg == mock_val @pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): +async def test_set_mute_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8822,20 +10435,21 @@ async def test_update_finding_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + await client.set_mute( + securitycenter_service.SetMuteRequest(), + name="name_value", + mute=finding.Finding.Mute.MUTED, ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateMuteConfigRequest, + iam_policy_pb2.SetIamPolicyRequest, dict, ], ) -def test_update_mute_config(request_type, transport: str = "grpc"): +def test_set_iam_policy(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8846,34 +10460,26 @@ def test_update_mute_config(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + call.return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) - response = client.update_mute_config(request) + response = client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" -def test_update_mute_config_empty_call(): +def test_set_iam_policy_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8882,19 +10488,16 @@ def test_update_mute_config_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - client.update_mute_config() + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + client.set_iam_policy() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() @pytest.mark.asyncio -async def test_update_mute_config_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateMuteConfigRequest, +async def test_set_iam_policy_async( + transport: str = "grpc_asyncio", request_type=iam_policy_pb2.SetIamPolicyRequest ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8906,57 +10509,47 @@ async def test_update_mute_config_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) ) - response = await client.update_mute_config(request) + response = await client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" @pytest.mark.asyncio -async def test_update_mute_config_async_from_dict(): - await test_update_mute_config_async(request_type=dict) +async def test_set_iam_policy_async_from_dict(): + await test_set_iam_policy_async(request_type=dict) -def test_update_mute_config_field_headers(): +def test_set_iam_policy_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() + request = iam_policy_pb2.SetIamPolicyRequest() - request.mute_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - call.return_value = gcs_mute_config.MuteConfig() - client.update_mute_config(request) + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + call.return_value = policy_pb2.Policy() + client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8967,30 +10560,26 @@ def test_update_mute_config_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "mute_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_mute_config_field_headers_async(): +async def test_set_iam_policy_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() + request = iam_policy_pb2.SetIamPolicyRequest() - request.mute_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig() - ) - await client.update_mute_config(request) + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9001,41 +10590,53 @@ async def test_update_mute_config_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "mute_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] -def test_update_mute_config_flattened(): +def test_set_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.set_iam_policy( + request={ + "resource": "resource_value", + "policy": policy_pb2.Policy(version=774), + "update_mask": field_mask_pb2.FieldMask(paths=["paths_value"]), + } + ) + call.assert_called() + + +def test_set_iam_policy_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() + call.return_value = policy_pb2.Policy() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_iam_policy( + resource="resource_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name="name_value") - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val -def test_update_mute_config_flattened_error(): +def test_set_iam_policy_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9043,50 +10644,41 @@ def test_update_mute_config_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) @pytest.mark.asyncio -async def test_update_mute_config_flattened_async(): +async def test_set_iam_policy_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() + call.return_value = policy_pb2.Policy() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.set_iam_policy( + resource="resource_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name="name_value") - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val @pytest.mark.asyncio -async def test_update_mute_config_flattened_error_async(): +async def test_set_iam_policy_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9094,21 +10686,20 @@ async def test_update_mute_config_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, + iam_policy_pb2.TestIamPermissionsRequest, dict, ], ) -def test_update_notification_config(request_type, transport: str = "grpc"): +def test_test_iam_permissions(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9120,34 +10711,25 @@ def test_update_notification_config(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + call.return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) - response = client.update_notification_config(request) + response = client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_update_notification_config_empty_call(): +def test_test_iam_permissions_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9157,18 +10739,18 @@ def test_update_notification_config_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: - client.update_notification_config() + client.test_iam_permissions() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() @pytest.mark.asyncio -async def test_update_notification_config_async( +async def test_test_iam_permissions_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateNotificationConfigRequest, + request_type=iam_policy_pb2.TestIamPermissionsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9181,54 +10763,48 @@ async def test_update_notification_config_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", + iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) ) - response = await client.update_notification_config(request) + response = await client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] @pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) +async def test_test_iam_permissions_async_from_dict(): + await test_test_iam_permissions_async(request_type=dict) -def test_update_notification_config_field_headers(): +def test_test_iam_permissions_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() - request.notification_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9239,30 +10815,30 @@ def test_update_notification_config_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "notification_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): +async def test_test_iam_permissions_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() - request.notification_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig() + iam_policy_pb2.TestIamPermissionsResponse() ) - await client.update_notification_config(request) + await client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9273,43 +10849,60 @@ async def test_update_notification_config_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "notification_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] -def test_update_notification_config_flattened(): +def test_test_iam_permissions_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + response = client.test_iam_permissions( + request={ + "resource": "resource_value", + "permissions": ["permissions_value"], + } + ) + call.assert_called() + + +def test_test_iam_permissions_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.test_iam_permissions( + resource="resource_value", + permissions=["permissions_value"], ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name="name_value") + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].permissions + mock_val = ["permissions_value"] assert arg == mock_val -def test_update_notification_config_flattened_error(): +def test_test_iam_permissions_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9317,54 +10910,50 @@ def test_update_notification_config_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource="resource_value", + permissions=["permissions_value"], ) @pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): +async def test_test_iam_permissions_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig() + iam_policy_pb2.TestIamPermissionsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.test_iam_permissions( + resource="resource_value", + permissions=["permissions_value"], ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name="name_value") + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].permissions + mock_val = ["permissions_value"] assert arg == mock_val @pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): +async def test_test_iam_permissions_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9372,23 +10961,21 @@ async def test_update_notification_config_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource="resource_value", + permissions=["permissions_value"], ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, + securitycenter_service.UpdateExternalSystemRequest, dict, ], ) -def test_update_organization_settings(request_type, transport: str = "grpc"): +def test_update_external_system(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9400,27 +10987,31 @@ def test_update_organization_settings(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( + call.return_value = gcs_external_system.ExternalSystem( name="name_value", - enable_asset_discovery=True, + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) - response = client.update_organization_settings(request) + response = client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance(response, gcs_external_system.ExternalSystem) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" -def test_update_organization_settings_empty_call(): +def test_update_external_system_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9430,18 +11021,18 @@ def test_update_organization_settings_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: - client.update_organization_settings() + client.update_external_system() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() @pytest.mark.asyncio -async def test_update_organization_settings_async( +async def test_update_external_system_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, + request_type=securitycenter_service.UpdateExternalSystemRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9454,50 +11045,54 @@ async def test_update_organization_settings_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings( + gcs_external_system.ExternalSystem( name="name_value", - enable_asset_discovery=True, + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) ) - response = await client.update_organization_settings(request) + response = await client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance(response, gcs_external_system.ExternalSystem) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" @pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) +async def test_update_external_system_async_from_dict(): + await test_update_external_system_async(request_type=dict) -def test_update_organization_settings_field_headers(): +def test_update_external_system_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() - request.organization_settings.name = "name_value" + request.external_system.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) + call.return_value = gcs_external_system.ExternalSystem() + client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9508,30 +11103,30 @@ def test_update_organization_settings_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "organization_settings.name=name_value", + "external_system.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): +async def test_update_external_system_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() - request.organization_settings.name = "name_value" + request.external_system.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings() + gcs_external_system.ExternalSystem() ) - await client.update_organization_settings(request) + await client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9542,39 +11137,41 @@ async def test_update_organization_settings_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "organization_settings.name=name_value", + "external_system.name=name_value", ) in kw["metadata"] -def test_update_organization_settings_flattened(): +def test_update_external_system_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() + call.return_value = gcs_external_system.ExternalSystem() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_organization_settings_flattened_error(): +def test_update_external_system_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9582,49 +11179,50 @@ def test_update_organization_settings_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): +async def test_update_external_system_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() + call.return_value = gcs_external_system.ExternalSystem() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings() + gcs_external_system.ExternalSystem() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + response = await client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): +async def test_update_external_system_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9632,22 +11230,21 @@ async def test_update_organization_settings_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + await client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateSourceRequest, + securitycenter_service.UpdateFindingRequest, dict, ], ) -def test_update_source(request_type, transport: str = "grpc"): +def test_update_finding(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9658,30 +11255,52 @@ def test_update_source(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( + call.return_value = gcs_finding.Finding( name="name_value", - display_name="display_name_value", - description="description_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_source(request) + response = client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_source_empty_call(): +def test_update_finding_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9690,17 +11309,17 @@ def test_update_source_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - client.update_source() + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + client.update_finding() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() @pytest.mark.asyncio -async def test_update_source_async( +async def test_update_finding_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateSourceRequest, + request_type=securitycenter_service.UpdateFindingRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9712,51 +11331,73 @@ async def test_update_source_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_source.Source( + gcs_finding.Finding( name="name_value", - display_name="display_name_value", - description="description_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_source(request) + response = await client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) +async def test_update_finding_async_from_dict(): + await test_update_finding_async(request_type=dict) -def test_update_source_field_headers(): +def test_update_finding_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() + request = securitycenter_service.UpdateFindingRequest() - request.source.name = "name_value" + request.finding.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - call.return_value = gcs_source.Source() - client.update_source(request) + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + call.return_value = gcs_finding.Finding() + client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9767,26 +11408,26 @@ def test_update_source_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "source.name=name_value", + "finding.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_source_field_headers_async(): +async def test_update_finding_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() + request = securitycenter_service.UpdateFindingRequest() - request.source.name = "name_value" + request.finding.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9797,35 +11438,35 @@ async def test_update_source_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "source.name=name_value", + "finding.name=name_value", ) in kw["metadata"] -def test_update_source_flattened(): +def test_update_finding_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() + call.return_value = gcs_finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name="name_value"), + client.update_finding( + finding=gcs_finding.Finding(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name="name_value") + arg = args[0].finding + mock_val = gcs_finding.Finding(name="name_value") assert arg == mock_val -def test_update_source_flattened_error(): +def test_update_finding_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9833,41 +11474,41 @@ def test_update_source_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name="name_value"), + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), ) @pytest.mark.asyncio -async def test_update_source_flattened_async(): +async def test_update_finding_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() + call.return_value = gcs_finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name="name_value"), + response = await client.update_finding( + finding=gcs_finding.Finding(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name="name_value") + arg = args[0].finding + mock_val = gcs_finding.Finding(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_update_source_flattened_error_async(): +async def test_update_finding_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9875,20 +11516,20 @@ async def test_update_source_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name="name_value"), + await client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, + securitycenter_service.UpdateMuteConfigRequest, dict, ], ) -def test_update_security_marks(request_type, transport: str = "grpc"): +def test_update_mute_config(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9900,27 +11541,33 @@ def test_update_security_marks(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( + call.return_value = gcs_mute_config.MuteConfig( name="name_value", - canonical_name="canonical_name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) - response = client.update_security_marks(request) + response = client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) + assert isinstance(response, gcs_mute_config.MuteConfig) assert response.name == "name_value" - assert response.canonical_name == "canonical_name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" -def test_update_security_marks_empty_call(): +def test_update_mute_config_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9930,18 +11577,18 @@ def test_update_security_marks_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: - client.update_security_marks() + client.update_mute_config() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() @pytest.mark.asyncio -async def test_update_security_marks_async( +async def test_update_mute_config_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateSecurityMarksRequest, + request_type=securitycenter_service.UpdateMuteConfigRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9954,50 +11601,56 @@ async def test_update_security_marks_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks( + gcs_mute_config.MuteConfig( name="name_value", - canonical_name="canonical_name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) ) - response = await client.update_security_marks(request) + response = await client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) + assert isinstance(response, gcs_mute_config.MuteConfig) assert response.name == "name_value" - assert response.canonical_name == "canonical_name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" @pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) +async def test_update_mute_config_async_from_dict(): + await test_update_mute_config_async(request_type=dict) -def test_update_security_marks_field_headers(): +def test_update_mute_config_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() + request = securitycenter_service.UpdateMuteConfigRequest() - request.security_marks.name = "name_value" + request.mute_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) + call.return_value = gcs_mute_config.MuteConfig() + client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10008,30 +11661,30 @@ def test_update_security_marks_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "security_marks.name=name_value", + "mute_config.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): +async def test_update_mute_config_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() + request = securitycenter_service.UpdateMuteConfigRequest() - request.security_marks.name = "name_value" + request.mute_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks() + gcs_mute_config.MuteConfig() ) - await client.update_security_marks(request) + await client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10042,37 +11695,41 @@ async def test_update_security_marks_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "security_marks.name=name_value", + "mute_config.name=name_value", ) in kw["metadata"] -def test_update_security_marks_flattened(): +def test_update_mute_config_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() + call.return_value = gcs_mute_config.MuteConfig() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name="name_value") + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_security_marks_flattened_error(): +def test_update_mute_config_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10080,45 +11737,50 @@ def test_update_security_marks_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): +async def test_update_mute_config_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() + call.return_value = gcs_mute_config.MuteConfig() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks() + gcs_mute_config.MuteConfig() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + response = await client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name="name_value") + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): +async def test_update_mute_config_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10126,20 +11788,21 @@ async def test_update_security_marks_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + await client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateBigQueryExportRequest, + securitycenter_service.UpdateNotificationConfigRequest, dict, ], ) -def test_create_big_query_export(request_type, transport: str = "grpc"): +def test_update_notification_config(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10151,35 +11814,34 @@ def test_create_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( + call.return_value = gcs_notification_config.NotificationConfig( name="name_value", description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), ) - response = client.create_big_query_export(request) + response = client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" -def test_create_big_query_export_empty_call(): +def test_update_notification_config_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10189,18 +11851,18 @@ def test_create_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: - client.create_big_query_export() + client.update_notification_config() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() @pytest.mark.asyncio -async def test_create_big_query_export_async( +async def test_update_notification_config_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.CreateBigQueryExportRequest, + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10213,58 +11875,54 @@ async def test_create_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport( + gcs_notification_config.NotificationConfig( name="name_value", description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", ) ) - response = await client.create_big_query_export(request) + response = await client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" @pytest.mark.asyncio -async def test_create_big_query_export_async_from_dict(): - await test_create_big_query_export_async(request_type=dict) +async def test_update_notification_config_async_from_dict(): + await test_update_notification_config_async(request_type=dict) -def test_create_big_query_export_field_headers(): +def test_update_notification_config_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() - request.parent = "parent_value" + request.notification_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: - call.return_value = bigquery_export.BigQueryExport() - client.create_big_query_export(request) + call.return_value = gcs_notification_config.NotificationConfig() + client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10275,30 +11933,30 @@ def test_create_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "notification_config.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_create_big_query_export_field_headers_async(): +async def test_update_notification_config_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() - request.parent = "parent_value" + request.notification_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_notification_config.NotificationConfig() ) - await client.create_big_query_export(request) + await client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10309,45 +11967,43 @@ async def test_create_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "notification_config.name=name_value", ) in kw["metadata"] -def test_create_big_query_export_flattened(): +def test_update_notification_config_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = gcs_notification_config.NotificationConfig() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.create_big_query_export( - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name="name_value") assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = "big_query_export_id_value" + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_create_big_query_export_flattened_error(): +def test_update_notification_config_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10355,55 +12011,54 @@ def test_create_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_create_big_query_export_flattened_async(): +async def test_update_notification_config_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = gcs_notification_config.NotificationConfig() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_notification_config.NotificationConfig() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.create_big_query_export( - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + response = await client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name="name_value") assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = "big_query_export_id_value" + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_create_big_query_export_flattened_error_async(): +async def test_update_notification_config_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10411,22 +12066,23 @@ async def test_create_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + await client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, + securitycenter_service.UpdateOrganizationSettingsRequest, dict, ], ) -def test_delete_big_query_export(request_type, transport: str = "grpc"): +def test_update_organization_settings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10438,22 +12094,27 @@ def test_delete_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_big_query_export(request) + call.return_value = gcs_organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) + response = client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True -def test_delete_big_query_export_empty_call(): +def test_update_organization_settings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10463,18 +12124,18 @@ def test_delete_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - client.delete_big_query_export() + client.update_organization_settings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() @pytest.mark.asyncio -async def test_delete_big_query_export_async( +async def test_update_organization_settings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.DeleteBigQueryExportRequest, + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10487,43 +12148,50 @@ async def test_delete_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_big_query_export(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) + ) + response = await client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True @pytest.mark.asyncio -async def test_delete_big_query_export_async_from_dict(): - await test_delete_big_query_export_async(request_type=dict) +async def test_update_organization_settings_async_from_dict(): + await test_update_organization_settings_async(request_type=dict) -def test_delete_big_query_export_field_headers(): +def test_update_organization_settings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() - request.name = "name_value" + request.organization_settings.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - call.return_value = None - client.delete_big_query_export(request) + call.return_value = gcs_organization_settings.OrganizationSettings() + client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10534,28 +12202,30 @@ def test_delete_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "organization_settings.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_delete_big_query_export_field_headers_async(): +async def test_update_organization_settings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() - request.name = "name_value" + request.organization_settings.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_big_query_export(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings() + ) + await client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10566,37 +12236,39 @@ async def test_delete_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "organization_settings.name=name_value", ) in kw["metadata"] -def test_delete_big_query_export_flattened(): +def test_update_organization_settings_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None + call.return_value = gcs_organization_settings.OrganizationSettings() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.delete_big_query_export( - name="name_value", + client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") assert arg == mock_val -def test_delete_big_query_export_flattened_error(): +def test_update_organization_settings_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10604,43 +12276,49 @@ def test_delete_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name="name_value", + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) @pytest.mark.asyncio -async def test_delete_big_query_export_flattened_async(): +async def test_update_organization_settings_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None + call.return_value = gcs_organization_settings.OrganizationSettings() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.delete_big_query_export( - name="name_value", + response = await client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_delete_big_query_export_flattened_error_async(): +async def test_update_organization_settings_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10648,20 +12326,24 @@ async def test_delete_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name="name_value", + await client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_update_big_query_export(request_type, transport: str = "grpc"): +def test_update_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10673,35 +12355,43 @@ def test_update_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) - response = client.update_big_query_export(request) + response = client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_update_big_query_export_empty_call(): +def test_update_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10711,18 +12401,22 @@ def test_update_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: - client.update_big_query_export() + client.update_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_update_big_query_export_async( +async def test_update_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateBigQueryExportRequest, + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10735,58 +12429,69 @@ async def test_update_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) ) - response = await client.update_big_query_export(request) + response = await client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" @pytest.mark.asyncio -async def test_update_big_query_export_async_from_dict(): - await test_update_big_query_export_async(request_type=dict) +async def test_update_security_health_analytics_custom_module_async_from_dict(): + await test_update_security_health_analytics_custom_module_async(request_type=dict) -def test_update_big_query_export_field_headers(): +def test_update_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - request.big_query_export.name = "name_value" + request.security_health_analytics_custom_module.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: - call.return_value = bigquery_export.BigQueryExport() - client.update_big_query_export(request) + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10797,30 +12502,31 @@ def test_update_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "big_query_export.name=name_value", + "security_health_analytics_custom_module.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_big_query_export_field_headers_async(): +async def test_update_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - request.big_query_export.name = "name_value" + request.security_health_analytics_custom_module.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - await client.update_big_query_export(request) + await client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10831,25 +12537,30 @@ async def test_update_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "big_query_export.name=name_value", + "security_health_analytics_custom_module.name=name_value", ) in kw["metadata"] -def test_update_big_query_export_flattened(): +def test_update_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10857,15 +12568,17 @@ def test_update_big_query_export_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) assert arg == mock_val arg = args[0].update_mask mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_big_query_export_flattened_error(): +def test_update_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10873,33 +12586,40 @@ def test_update_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_big_query_export_flattened_async(): +async def test_update_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + response = await client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10907,8 +12627,10 @@ async def test_update_big_query_export_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) assert arg == mock_val arg = args[0].update_mask mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) @@ -10916,7 +12638,7 @@ async def test_update_big_query_export_flattened_async(): @pytest.mark.asyncio -async def test_update_big_query_export_flattened_error_async(): +async def test_update_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10924,9 +12646,11 @@ async def test_update_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + await client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10934,11 +12658,11 @@ async def test_update_big_query_export_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListBigQueryExportsRequest, + securitycenter_service.UpdateSourceRequest, dict, ], ) -def test_list_big_query_exports(request_type, transport: str = "grpc"): +def test_update_source(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10949,26 +12673,30 @@ def test_list_big_query_exports(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token="next_page_token_value", + call.return_value = gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) - response = client.list_big_query_exports(request) + response = client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_list_big_query_exports_empty_call(): +def test_update_source_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10977,19 +12705,17 @@ def test_list_big_query_exports_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - client.list_big_query_exports() + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + client.update_source() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() @pytest.mark.asyncio -async def test_list_big_query_exports_async( +async def test_update_source_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListBigQueryExportsRequest, + request_type=securitycenter_service.UpdateSourceRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -11001,49 +12727,51 @@ async def test_list_big_query_exports_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse( - next_page_token="next_page_token_value", + gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) ) - response = await client.list_big_query_exports(request) + response = await client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_list_big_query_exports_async_from_dict(): - await test_list_big_query_exports_async(request_type=dict) +async def test_update_source_async_from_dict(): + await test_update_source_async(request_type=dict) -def test_list_big_query_exports_field_headers(): +def test_update_source_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() + request = securitycenter_service.UpdateSourceRequest() - request.parent = "parent_value" + request.source.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - client.list_big_query_exports(request) + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + call.return_value = gcs_source.Source() + client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -11054,30 +12782,26 @@ def test_list_big_query_exports_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "source.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_list_big_query_exports_field_headers_async(): +async def test_update_source_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() + request = securitycenter_service.UpdateSourceRequest() - request.parent = "parent_value" + request.source.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse() - ) - await client.list_big_query_exports(request) + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -11088,37 +12812,35 @@ async def test_list_big_query_exports_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "source.name=name_value", ) in kw["metadata"] -def test_list_big_query_exports_flattened(): +def test_update_source_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() + call.return_value = gcs_source.Source() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_big_query_exports( - parent="parent_value", + client.update_source( + source=gcs_source.Source(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" + arg = args[0].source + mock_val = gcs_source.Source(name="name_value") assert arg == mock_val -def test_list_big_query_exports_flattened_error(): +def test_update_source_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -11126,45 +12848,41 @@ def test_list_big_query_exports_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent="parent_value", + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name="name_value"), ) @pytest.mark.asyncio -async def test_list_big_query_exports_flattened_async(): +async def test_update_source_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() + call.return_value = gcs_source.Source() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_big_query_exports( - parent="parent_value", + response = await client.update_source( + source=gcs_source.Source(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" + arg = args[0].source + mock_val = gcs_source.Source(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_list_big_query_exports_flattened_error_async(): +async def test_update_source_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -11172,1231 +12890,2907 @@ async def test_list_big_query_exports_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent="parent_value", + await client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name="name_value"), ) -def test_list_big_query_exports_pager(transport_name: str = "grpc"): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, + ], +) +def test_update_security_marks(request_type, transport: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks( + name="name_value", + canonical_name="canonical_name_value", ) - pager = client.list_big_query_exports(request={}) + response = client.update_security_marks(request) - assert pager._metadata == metadata + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) for i in results) + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == "name_value" + assert response.canonical_name == "canonical_name_value" -def test_list_big_query_exports_pages(transport_name: str = "grpc"): +def test_update_security_marks_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = list(client.list_big_query_exports(request={}).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + client.update_security_marks() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() @pytest.mark.asyncio -async def test_list_big_query_exports_async_pager(): +async def test_update_security_marks_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.UpdateSecurityMarksRequest, +): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_big_query_exports( - request={}, + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks( + name="name_value", + canonical_name="canonical_name_value", + ) ) - assert async_pager.next_page_token == "abc" - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) + response = await client.update_security_marks(request) - assert len(responses) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) for i in responses) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == "name_value" + assert response.canonical_name == "canonical_name_value" -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - "__call__", - new_callable=mock.AsyncMock, - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in ( - await client.list_big_query_exports(request={}) - ).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token +@pytest.mark.asyncio +async def test_update_security_marks_async_from_dict(): + await test_update_security_marks_async(request_type=dict) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.BulkMuteFindingsRequest, - dict, - ], -) -def test_bulk_mute_findings_rest(request_type): +def test_update_security_marks_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + request.security_marks.name = "name_value" - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.bulk_mute_findings(request) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + call.return_value = gcs_security_marks.SecurityMarks() + client.update_security_marks(request) - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "security_marks.name=name_value", + ) in kw["metadata"] -def test_bulk_mute_findings_rest_required_fields( - request_type=securitycenter_service.BulkMuteFindingsRequest, -): - transport_class = transports.SecurityCenterRestTransport - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) +@pytest.mark.asyncio +async def test_update_security_marks_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), ) - # verify fields with default values are dropped + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + request.security_marks.name = "name_value" - # verify required fields with default values are now present + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks() + ) + await client.update_security_marks(request) - jsonified_request["parent"] = "parent_value" + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "security_marks.name=name_value", + ) in kw["metadata"] - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" +def test_update_security_marks_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.bulk_mute_findings(request) - - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_bulk_mute_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent",))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_bulk_mute_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - operation.Operation, "_set_result_from_operation" - ), mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.BulkMuteFindingsRequest.pb( - securitycenter_service.BulkMuteFindingsRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) - - request = securitycenter_service.BulkMuteFindingsRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.bulk_mute_findings( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], + type(client.transport.update_security_marks), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) - pre.assert_called_once() - post.assert_called_once() + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name="name_value") + assert arg == mock_val -def test_bulk_mute_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.BulkMuteFindingsRequest -): +def test_update_security_marks_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.bulk_mute_findings(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + ) -def test_bulk_mute_findings_rest_flattened(): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_update_security_marks_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") - - # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() - # get truthy value for each flattened field - mock_args = dict( - parent="parent_value", + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.bulk_mute_findings(**mock_args) # Establish that the underlying call was made with the expected # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, - args[1], - ) + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name="name_value") + assert arg == mock_val -def test_bulk_mute_findings_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_update_security_marks_flattened_error_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent="parent_value", + await client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) -def test_bulk_mute_findings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateSourceRequest, + securitycenter_service.CreateBigQueryExportRequest, dict, ], ) -def test_create_source_rest(request_type): +def test_create_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["source"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "canonical_name": "canonical_name_value", - } - request = request_type(**request_init) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( name="name_value", - display_name="display_name_value", description="description_value", - canonical_name="canonical_name_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", ) + response = client.create_big_query_export(request) - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.create_source(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, bigquery_export.BigQueryExport) assert response.name == "name_value" - assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" -def test_create_source_rest_required_fields( - request_type=securitycenter_service.CreateSourceRequest, -): - transport_class = transports.SecurityCenterRestTransport +def test_create_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + client.create_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_create_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.CreateBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - # verify fields with default values are dropped + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + ) + response = await client.create_big_query_export(request) - # verify required fields with default values are now present + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - jsonified_request["parent"] = "parent_value" + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" +@pytest.mark.asyncio +async def test_create_big_query_export_async_from_dict(): + await test_create_big_query_export_async(request_type=dict) + +def test_create_big_query_export_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result - response_value = Response() - response_value.status_code = 200 + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + request.parent = "parent_value" - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + call.return_value = bigquery_export.BigQueryExport() + client.create_big_query_export(request) - response = client.create_source(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials +@pytest.mark.asyncio +async def test_create_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), ) - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(()) - & set( - ( - "parent", - "source", - ) + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() ) - ) + await client.create_big_query_export(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_big_query_export_flattened(): + client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), ) - client = SecurityCenterClient(transport=transport) + + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_source" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_source" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb( - securitycenter_service.CreateSourceRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_big_query_export( + parent="parent_value", + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) - pre.assert_called_once() - post.assert_called_once() + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = "big_query_export_id_value" + assert arg == mock_val -def test_create_source_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateSourceRequest -): +def test_create_big_query_export_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["source"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "canonical_name": "canonical_name_value", - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), + parent="parent_value", + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", + ) -def test_create_source_rest_flattened(): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() - # get truthy value for each flattened field - mock_args = dict( + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_big_query_export( parent="parent_value", - source=gcs_source.Source(name="name_value"), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.create_source(**mock_args) # Establish that the underlying call was made with the expected # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] - ) + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = "big_query_export_id_value" + assert arg == mock_val -def test_create_source_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), + await client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), parent="parent_value", - source=gcs_source.Source(name="name_value"), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateFindingRequest, + securitycenter_service.DeleteBigQueryExportRequest, dict, ], ) -def test_create_finding_rest(request_type): +def test_delete_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} - request_init["finding"] = { - "name": "name_value", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { - "base_score": 0.1046, - "attack_vector": 1, - "attack_complexity": 1, - "privileges_required": 1, - "user_interaction": 1, - "scope": 1, - "confidentiality_impact": 1, - "integrity_impact": 1, - "availability_impact": 1, - }, - "upstream_fix_available": True, - } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } - ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, - } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], - } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } - ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], - } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } - ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", - ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_big_query_export(request) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.create_finding(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert response is None -def test_create_finding_rest_required_fields( - request_type=securitycenter_service.CreateFindingRequest, -): - transport_class = transports.SecurityCenterRestTransport +def test_delete_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + client.delete_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_delete_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.DeleteBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - # verify fields with default values are dropped - assert "findingId" not in jsonified_request + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_big_query_export(request) - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - jsonified_request["parent"] = "parent_value" - jsonified_request["findingId"] = "finding_id_value" + # Establish that the response is the type that we expect. + assert response is None - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id",)) - jsonified_request.update(unset_fields) - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == "finding_id_value" +@pytest.mark.asyncio +async def test_delete_big_query_export_async_from_dict(): + await test_delete_big_query_export_async(request_type=dict) + +def test_delete_big_query_export_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - request = request_type(**request_init) - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() - response_value = Response() - response_value.status_code = 200 + request.name = "name_value" - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + call.return_value = None + client.delete_big_query_export(request) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request - response = client.create_finding(request) + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] - expected_params = [ - ( - "findingId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params +@pytest.mark.asyncio +async def test_delete_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() + + request.name = "name_value" -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), ) - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("findingId",)) - & set( - ( - "parent", - "findingId", - "finding", - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_big_query_export( + name="name_value", ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), ) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name="name_value", + ) + -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), ) - client = SecurityCenterClient(transport=transport) + + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_finding" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_finding" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb( - securitycenter_service.CreateFindingRequest() + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_big_query_export( + name="name_value", ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val - request = securitycenter_service.CreateFindingRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - client.create_finding( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) - pre.assert_called_once() - post.assert_called_once() + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name="name_value", + ) -def test_create_finding_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateFindingRequest -): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateBigQueryExportRequest, + dict, + ], +) +def test_update_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} - request_init["finding"] = { - "name": "name_value", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + response = client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +def test_update_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + client.update_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_update_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.UpdateBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + ) + response = await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +@pytest.mark.asyncio +async def test_update_big_query_export_async_from_dict(): + await test_update_big_query_export_async(request_type=dict) + + +def test_update_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + call.return_value = bigquery_export.BigQueryExport() + client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "big_query_export.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "big_query_export.name=name_value", + ) in kw["metadata"] + + +def test_update_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListBigQueryExportsRequest, + dict, + ], +) +def test_list_big_query_exports(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse( + next_page_token="next_page_token_value", + ) + response = client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_big_query_exports_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + client.list_big_query_exports() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListBigQueryExportsRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_from_dict(): + await test_list_big_query_exports_async(request_type=dict) + + +def test_list_big_query_exports_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_big_query_exports_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse() + ) + await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_big_query_exports_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_big_query_exports( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_big_query_exports_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_big_query_exports( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent="parent_value", + ) + + +def test_list_big_query_exports_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_big_query_exports(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) for i in results) + + +def test_list_big_query_exports_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = list(client.list_big_query_exports(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_big_query_exports( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) for i in responses) + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_big_query_exports(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.BulkMuteFindingsRequest, + dict, + ], +) +def test_bulk_mute_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.bulk_mute_findings(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_bulk_mute_findings_rest_required_fields( + request_type=securitycenter_service.BulkMuteFindingsRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.bulk_mute_findings(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_bulk_mute_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_bulk_mute_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + operation.Operation, "_set_result_from_operation" + ), mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.BulkMuteFindingsRequest.pb( + securitycenter_service.BulkMuteFindingsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() + ) + + request = securitycenter_service.BulkMuteFindingsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.bulk_mute_findings( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_bulk_mute_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.BulkMuteFindingsRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.bulk_mute_findings(request) + + +def test_bulk_mute_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.bulk_mute_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, + args[1], + ) + + +def test_bulk_mute_findings_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.bulk_mute_findings( + securitycenter_service.BulkMuteFindingsRequest(), + parent="parent_value", + ) + + +def test_bulk_mute_findings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_create_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} + request_init["security_health_analytics_custom_module"] = { + "name": "name_value", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +def test_create_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_security_health_analytics_custom_module(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "securityHealthAnalyticsCustomModule", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "post_create_security_health_analytics_custom_module", + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_create_security_health_analytics_custom_module", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + client.create_security_health_analytics_custom_module( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_security_health_analytics_custom_module_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} + request_init["security_health_analytics_custom_module"] = { + "name": "name_value", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_security_health_analytics_custom_module(request) + + +def test_create_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + # get arguments that satisfy an http rule for this method + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" + % client.transport._host, + args[1], + ) + + +def test_create_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + +def test_create_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSourceRequest, + dict, + ], +) +def test_create_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["source"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "canonical_name": "canonical_name_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" + + +def test_create_source_rest_required_fields( + request_type=securitycenter_service.CreateSourceRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_source(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_source._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "source", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_source" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_source" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSourceRequest.pb( + securitycenter_service.CreateSourceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.CreateSourceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.create_source( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_source_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateSourceRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["source"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "canonical_name": "canonical_name_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_source(request) + + +def test_create_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + source=gcs_source.Source(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] + ) + + +def test_create_source_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent="parent_value", + source=gcs_source.Source(name="name_value"), + ) + + +def test_create_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateFindingRequest, + dict, + ], +) +def test_create_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init["finding"] = { + "name": "name_value", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { + "base_score": 0.1046, + "attack_vector": 1, + "attack_complexity": 1, + "privileges_required": 1, + "user_interaction": 1, + "scope": 1, + "confidentiality_impact": 1, + "integrity_impact": 1, + "availability_impact": 1, + }, + "upstream_fix_available": True, + } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name="name_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == "name_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" + + +def test_create_finding_rest_required_fields( + request_type=securitycenter_service.CreateFindingRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["finding_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "findingId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == request_init["finding_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["findingId"] = "finding_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("finding_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == "finding_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_finding(request) + + expected_params = [ + ( + "findingId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_finding._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("findingId",)) + & set( + ( + "parent", + "findingId", + "finding", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_finding" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_finding" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateFindingRequest.pb( + securitycenter_service.CreateFindingRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.CreateFindingRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.create_finding( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_finding_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateFindingRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init["finding"] = { + "name": "name_value", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { "base_score": 0.1046, "attack_vector": 1, "attack_complexity": 1, @@ -12409,140 +15803,2118 @@ def test_create_finding_rest_bad_request( }, "upstream_fix_available": True, } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_finding(request) + + +def test_create_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1/sources/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + finding_id="finding_id_value", + finding=gcs_finding.Finding(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/sources/*}/findings" + % client.transport._host, + args[1], + ) + + +def test_create_finding_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent="parent_value", + finding_id="finding_id_value", + finding=gcs_finding.Finding(name="name_value"), + ) + + +def test_create_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateMuteConfigRequest, + dict, + ], +) +def test_create_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["mute_config"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig( + name="name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_mute_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" + + +def test_create_mute_config_rest_required_fields( + request_type=securitycenter_service.CreateMuteConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["mute_config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "muteConfigId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["muteConfigId"] = "mute_config_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_mute_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("mute_config_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == "mute_config_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_mute_config(request) + + expected_params = [ + ( + "muteConfigId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("muteConfigId",)) + & set( + ( + "parent", + "muteConfig", + "muteConfigId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_mute_config" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_mute_config" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateMuteConfigRequest.pb( + securitycenter_service.CreateMuteConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_mute_config.MuteConfig.to_json( + gcs_mute_config.MuteConfig() + ) + + request = securitycenter_service.CreateMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.create_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["mute_config"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_mute_config(request) + + +def test_create_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + mute_config_id="mute_config_id_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + args[1], + ) + + +def test_create_mute_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_mute_config( + securitycenter_service.CreateMuteConfigRequest(), + parent="parent_value", + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + mute_config_id="mute_config_id_value", + ) + + +def test_create_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateNotificationConfigRequest, + dict, + ], +) +def test_create_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["notification_config"] = { + "name": "name_value", + "description": "description_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name="name_value", + description="description_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" + + +def test_create_notification_config_rest_required_fields( + request_type=securitycenter_service.CreateNotificationConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "configId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "configId" in jsonified_request + assert jsonified_request["configId"] == request_init["config_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["configId"] = "config_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("config_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "configId" in jsonified_request + assert jsonified_request["configId"] == "config_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_notification_config(request) + + expected_params = [ + ( + "configId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("configId",)) + & set( + ( + "parent", + "configId", + "notificationConfig", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_notification_config" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_notification_config" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateNotificationConfigRequest.pb( + securitycenter_service.CreateNotificationConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json( + gcs_notification_config.NotificationConfig() + ) + + request = securitycenter_service.CreateNotificationConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.create_notification_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.CreateNotificationConfigRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["notification_config"] = { + "name": "name_value", + "description": "description_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_notification_config(request) + + +def test_create_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + config_id="config_id_value", + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/notificationConfigs" + % client.transport._host, + args[1], + ) + + +def test_create_notification_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent="parent_value", + config_id="config_id_value", + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + ) + + +def test_create_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteMuteConfigRequest, + dict, + ], +) +def test_delete_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_mute_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_mute_config_rest_required_fields( + request_type=securitycenter_service.DeleteMuteConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_mute_config(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_delete_mute_config" + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteMuteConfigRequest.pb( + securitycenter_service.DeleteMuteConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + + +def test_delete_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.DeleteMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_mute_config(request) + + +def test_delete_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, + args[1], + ) + + +def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_mute_config( + securitycenter_service.DeleteMuteConfigRequest(), + name="name_value", + ) + + +def test_delete_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, + ], +) +def test_delete_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_notification_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_rest_required_fields( + request_type=securitycenter_service.DeleteNotificationConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_notification_config(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_delete_notification_config" + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb( + securitycenter_service.DeleteNotificationConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteNotificationConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_notification_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, + ) + + pre.assert_called_once() + + +def test_delete_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.DeleteNotificationConfigRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_notification_config(request) + + +def test_delete_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/notificationConfigs/*}" + % client.transport._host, + args[1], + ) + + +def test_delete_notification_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name="name_value", + ) + + +def test_delete_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_delete_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_security_health_analytics_custom_module(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_delete_security_health_analytics_custom_module", + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_security_health_analytics_custom_module( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + + +def test_delete_security_health_analytics_custom_module_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_security_health_analytics_custom_module(request) + + +def test_delete_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" + % client.transport._host, + args[1], + ) + + +def test_delete_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +def test_delete_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GetBigQueryExportRequest, + dict, + ], +) +def test_get_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_big_query_export(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +def test_get_big_query_export_rest_required_fields( + request_type=securitycenter_service.GetBigQueryExportRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_big_query_export(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_get_big_query_export" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_big_query_export" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetBigQueryExportRequest.pb( + securitycenter_service.GetBigQueryExportRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = bigquery_export.BigQueryExport.to_json( + bigquery_export.BigQueryExport() + ) + + request = securitycenter_service.GetBigQueryExportRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = bigquery_export.BigQueryExport() + + client.get_big_query_export( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_big_query_export_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.GetBigQueryExportRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_big_query_export(request) + + +def test_get_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/bigQueryExports/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, + args[1], + ) + + +def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_big_query_export( + securitycenter_service.GetBigQueryExportRequest(), + name="name_value", + ) + + +def test_get_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + iam_policy_pb2.GetIamPolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "organizations/sample1/sources/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" + + +def test_get_iam_policy_rest_required_fields( + request_type=iam_policy_pb2.GetIamPolicyRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.GetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.GetIamPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, - } + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.GetIamPolicyRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12554,10 +17926,10 @@ def test_create_finding_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_finding(request) + client.get_iam_policy(request) -def test_create_finding_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12566,41 +17938,39 @@ def test_create_finding_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = policy_pb2.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"resource": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - finding_id="finding_id_value", - finding=gcs_finding.Finding(name="name_value"), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_finding(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*/sources/*}/findings" + "%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1], ) -def test_create_finding_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12609,15 +17979,13 @@ def test_create_finding_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent="parent_value", - finding_id="finding_id_value", - finding=gcs_finding.Finding(name="name_value"), + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource="resource_value", ) -def test_create_finding_rest_error(): +def test_get_iam_policy_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12626,33 +17994,24 @@ def test_create_finding_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateMuteConfigRequest, + securitycenter_service.GetMuteConfigRequest, dict, ], ) -def test_create_mute_config_rest(request_type): +def test_get_mute_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["mute_config"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", - } + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( + return_value = mute_config.MuteConfig( name="name_value", display_name="display_name_value", description="description_value", @@ -12663,15 +18022,15 @@ def test_create_mute_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_mute_config(request) + response = client.get_mute_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) + assert isinstance(response, mute_config.MuteConfig) assert response.name == "name_value" assert response.display_name == "display_name_value" assert response.description == "description_value" @@ -12679,14 +18038,13 @@ def test_create_mute_config_rest(request_type): assert response.most_recent_editor == "most_recent_editor_value" -def test_create_mute_config_rest_required_fields( - request_type=securitycenter_service.CreateMuteConfigRequest, +def test_get_mute_config_rest_required_fields( + request_type=securitycenter_service.GetMuteConfigRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" - request_init["mute_config_id"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -12698,32 +18056,24 @@ def test_create_mute_config_rest_required_fields( ) # verify fields with default values are dropped - assert "muteConfigId" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_mute_config._get_unset_required_fields(jsonified_request) + ).get_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] - jsonified_request["parent"] = "parent_value" - jsonified_request["muteConfigId"] = "mute_config_id_value" + jsonified_request["name"] = "name_value" - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("mute_config_id",)) + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == "mute_config_id_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12732,7 +18082,7 @@ def test_create_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = mute_config.MuteConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -12744,54 +18094,38 @@ def test_create_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_mute_config(request) + response = client.get_mute_config(request) - expected_params = [ - ( - "muteConfigId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] + expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_mute_config_rest_unset_required_fields(): +def test_get_mute_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("muteConfigId",)) - & set( - ( - "parent", - "muteConfig", - "muteConfigId", - ) - ) - ) + unset_fields = transport.get_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_mute_config_rest_interceptors(null_interceptor): +def test_get_mute_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -12804,14 +18138,14 @@ def test_create_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_mute_config" + transports.SecurityCenterRestInterceptor, "post_get_mute_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_mute_config" + transports.SecurityCenterRestInterceptor, "pre_get_mute_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.CreateMuteConfigRequest.pb( - securitycenter_service.CreateMuteConfigRequest() + pb_message = securitycenter_service.GetMuteConfigRequest.pb( + securitycenter_service.GetMuteConfigRequest() ) transcode.return_value = { "method": "post", @@ -12823,19 +18157,19 @@ def test_create_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json( - gcs_mute_config.MuteConfig() + req.return_value._content = mute_config.MuteConfig.to_json( + mute_config.MuteConfig() ) - request = securitycenter_service.CreateMuteConfigRequest() + request = securitycenter_service.GetMuteConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() + post.return_value = mute_config.MuteConfig() - client.create_mute_config( + client.get_mute_config( request, metadata=[ ("key", "val"), @@ -12847,8 +18181,8 @@ def test_create_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateMuteConfigRequest +def test_get_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GetMuteConfigRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12856,16 +18190,7 @@ def test_create_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["mute_config"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", - } + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12877,10 +18202,10 @@ def test_create_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_mute_config(request) + client.get_mute_config(request) -def test_create_mute_config_rest_flattened(): +def test_get_mute_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12889,40 +18214,38 @@ def test_create_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = mute_config.MuteConfig() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - mute_config_id="mute_config_id_value", + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_mute_config(**mock_args) + client.get_mute_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1], ) -def test_create_mute_config_rest_flattened_error(transport: str = "rest"): +def test_get_mute_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12931,15 +18254,13 @@ def test_create_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent="parent_value", - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - mute_config_id="mute_config_id_value", + client.get_mute_config( + securitycenter_service.GetMuteConfigRequest(), + name="name_value", ) -def test_create_mute_config_rest_error(): +def test_get_mute_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12948,36 +18269,29 @@ def test_create_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateNotificationConfigRequest, + securitycenter_service.GetNotificationConfigRequest, dict, ], ) -def test_create_notification_config_rest(request_type): +def test_get_notification_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["notification_config"] = { - "name": "name_value", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, - } + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( + return_value = notification_config.NotificationConfig( name="name_value", description="description_value", pubsub_topic="pubsub_topic_value", service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + streaming_config=notification_config.NotificationConfig.StreamingConfig( filter="filter_value" ), ) @@ -12985,29 +18299,28 @@ def test_create_notification_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_notification_config(request) + response = client.get_notification_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) + assert isinstance(response, notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" assert response.pubsub_topic == "pubsub_topic_value" assert response.service_account == "service_account_value" -def test_create_notification_config_rest_required_fields( - request_type=securitycenter_service.CreateNotificationConfigRequest, +def test_get_notification_config_rest_required_fields( + request_type=securitycenter_service.GetNotificationConfigRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -13019,32 +18332,24 @@ def test_create_notification_config_rest_required_fields( ) # verify fields with default values are dropped - assert "configId" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_notification_config._get_unset_required_fields(jsonified_request) + ).get_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - jsonified_request["parent"] = "parent_value" - jsonified_request["configId"] = "config_id_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id",)) + ).get_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "configId" in jsonified_request - assert jsonified_request["configId"] == "config_id_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13053,7 +18358,7 @@ def test_create_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = notification_config.NotificationConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13065,56 +18370,38 @@ def test_create_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb( - return_value - ) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_notification_config(request) + response = client.get_notification_config(request) - expected_params = [ - ( - "configId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] + expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_notification_config_rest_unset_required_fields(): +def test_get_notification_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("configId",)) - & set( - ( - "parent", - "configId", - "notificationConfig", - ) - ) - ) + unset_fields = transport.get_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): +def test_get_notification_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13127,14 +18414,14 @@ def test_create_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_notification_config" + transports.SecurityCenterRestInterceptor, "post_get_notification_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_notification_config" + transports.SecurityCenterRestInterceptor, "pre_get_notification_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb( - securitycenter_service.CreateNotificationConfigRequest() + pb_message = securitycenter_service.GetNotificationConfigRequest.pb( + securitycenter_service.GetNotificationConfigRequest() ) transcode.return_value = { "method": "post", @@ -13146,19 +18433,19 @@ def test_create_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json( - gcs_notification_config.NotificationConfig() + req.return_value._content = notification_config.NotificationConfig.to_json( + notification_config.NotificationConfig() ) - request = securitycenter_service.CreateNotificationConfigRequest() + request = securitycenter_service.GetNotificationConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() + post.return_value = notification_config.NotificationConfig() - client.create_notification_config( + client.get_notification_config( request, metadata=[ ("key", "val"), @@ -13170,9 +18457,9 @@ def test_create_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_notification_config_rest_bad_request( +def test_get_notification_config_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.CreateNotificationConfigRequest, + request_type=securitycenter_service.GetNotificationConfigRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13180,14 +18467,7 @@ def test_create_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["notification_config"] = { - "name": "name_value", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, - } + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13199,10 +18479,10 @@ def test_create_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_notification_config(request) + client.get_notification_config(request) -def test_create_notification_config_rest_flattened(): +def test_get_notification_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13211,43 +18491,39 @@ def test_create_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = notification_config.NotificationConfig() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - config_id="config_id_value", - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_notification_config(**mock_args) + client.get_notification_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/notificationConfigs" + "%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1], ) -def test_create_notification_config_rest_flattened_error(transport: str = "rest"): +def test_get_notification_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13256,17 +18532,13 @@ def test_create_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent="parent_value", - config_id="config_id_value", - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name="name_value", ) -def test_create_notification_config_rest_error(): +def test_get_notification_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13275,40 +18547,46 @@ def test_create_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteMuteConfigRequest, + securitycenter_service.GetOrganizationSettingsRequest, dict, ], ) -def test_delete_mute_config_rest(request_type): +def test_get_organization_settings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"name": "organizations/sample1/organizationSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_mute_config(request) + response = client.get_organization_settings(request) # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True -def test_delete_mute_config_rest_required_fields( - request_type=securitycenter_service.DeleteMuteConfigRequest, +def test_get_organization_settings_rest_required_fields( + request_type=securitycenter_service.GetOrganizationSettingsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13328,7 +18606,7 @@ def test_delete_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_mute_config._get_unset_required_fields(jsonified_request) + ).get_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13337,7 +18615,7 @@ def test_delete_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_mute_config._get_unset_required_fields(jsonified_request) + ).get_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13351,7 +18629,7 @@ def test_delete_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13363,36 +18641,40 @@ def test_delete_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": pb_request, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = "" + + pb_return_value = organization_settings.OrganizationSettings.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_mute_config(request) + response = client.get_organization_settings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_mute_config_rest_unset_required_fields(): +def test_get_organization_settings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_mute_config._get_unset_required_fields({}) + unset_fields = transport.get_organization_settings._get_unset_required_fields({}) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_mute_config_rest_interceptors(null_interceptor): +def test_get_organization_settings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13405,11 +18687,14 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_delete_mute_config" + transports.SecurityCenterRestInterceptor, "post_get_organization_settings" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_organization_settings" ) as pre: pre.assert_not_called() - pb_message = securitycenter_service.DeleteMuteConfigRequest.pb( - securitycenter_service.DeleteMuteConfigRequest() + post.assert_not_called() + pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb( + securitycenter_service.GetOrganizationSettingsRequest() ) transcode.return_value = { "method": "post", @@ -13421,15 +18706,19 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() + req.return_value._content = organization_settings.OrganizationSettings.to_json( + organization_settings.OrganizationSettings() + ) - request = securitycenter_service.DeleteMuteConfigRequest() + request = securitycenter_service.GetOrganizationSettingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata + post.return_value = organization_settings.OrganizationSettings() - client.delete_mute_config( + client.get_organization_settings( request, metadata=[ ("key", "val"), @@ -13438,10 +18727,12 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): ) pre.assert_called_once() + post.assert_called_once() -def test_delete_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.DeleteMuteConfigRequest +def test_get_organization_settings_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.GetOrganizationSettingsRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13449,7 +18740,7 @@ def test_delete_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"name": "organizations/sample1/organizationSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13461,10 +18752,10 @@ def test_delete_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_mute_config(request) + client.get_organization_settings(request) -def test_delete_mute_config_rest_flattened(): +def test_get_organization_settings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13473,10 +18764,10 @@ def test_delete_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings() # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} + sample_request = {"name": "organizations/sample1/organizationSettings"} # get truthy value for each flattened field mock_args = dict( @@ -13487,23 +18778,25 @@ def test_delete_mute_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_mute_config(**mock_args) + client.get_organization_settings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, + "%s/v1/{name=organizations/*/organizationSettings}" + % client.transport._host, args[1], ) -def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): +def test_get_organization_settings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13512,13 +18805,13 @@ def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), name="name_value", ) -def test_delete_mute_config_rest_error(): +def test_get_organization_settings_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13527,40 +18820,58 @@ def test_delete_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_delete_notification_config_rest(request_type): +def test_get_effective_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( + name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + display_name="display_name_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_notification_config(request) + response = client.get_effective_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert response is None + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.display_name == "display_name_value" -def test_delete_notification_config_rest_required_fields( - request_type=securitycenter_service.DeleteNotificationConfigRequest, +def test_get_effective_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13580,7 +18891,9 @@ def test_delete_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_notification_config._get_unset_required_fields(jsonified_request) + ).get_effective_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13589,7 +18902,9 @@ def test_delete_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_notification_config._get_unset_required_fields(jsonified_request) + ).get_effective_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13603,7 +18918,9 @@ def test_delete_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = None + return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13615,36 +18932,46 @@ def test_delete_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": pb_request, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = "" + + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_notification_config(request) + response = client.get_effective_security_health_analytics_custom_module( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_notification_config_rest_unset_required_fields(): +def test_get_effective_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + unset_fields = transport.get_effective_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): +def test_get_effective_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13657,11 +18984,16 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_delete_notification_config" + transports.SecurityCenterRestInterceptor, + "post_get_effective_security_health_analytics_custom_module", + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_get_effective_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb( - securitycenter_service.DeleteNotificationConfigRequest() + post.assert_not_called() + pb_message = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() ) transcode.return_value = { "method": "post", @@ -13673,15 +19005,23 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() + req.return_value._content = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.to_json( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - request = securitycenter_service.DeleteNotificationConfigRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata + post.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - client.delete_notification_config( + client.get_effective_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -13690,11 +19030,12 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): ) pre.assert_called_once() + post.assert_called_once() -def test_delete_notification_config_rest_bad_request( +def test_get_effective_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.DeleteNotificationConfigRequest, + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13702,7 +19043,9 @@ def test_delete_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13714,10 +19057,10 @@ def test_delete_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_notification_config(request) + client.get_effective_security_health_analytics_custom_module(request) -def test_delete_notification_config_rest_flattened(): +def test_get_effective_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13726,10 +19069,14 @@ def test_delete_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } # get truthy value for each flattened field mock_args = dict( @@ -13740,24 +19087,29 @@ def test_delete_notification_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_notification_config(**mock_args) + client.get_effective_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/notificationConfigs/*}" + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}" % client.transport._host, args[1], ) -def test_delete_notification_config_rest_flattened_error(transport: str = "rest"): +def test_get_effective_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13766,13 +19118,13 @@ def test_delete_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) -def test_delete_notification_config_rest_error(): +def test_get_effective_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13781,54 +19133,62 @@ def test_delete_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetBigQueryExportRequest, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_big_query_export_rest(request_type): +def test_get_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( + return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_big_query_export(request) + response = client.get_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_get_big_query_export_rest_required_fields( - request_type=securitycenter_service.GetBigQueryExportRequest, +def test_get_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13848,7 +19208,9 @@ def test_get_big_query_export_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_big_query_export._get_unset_required_fields(jsonified_request) + ).get_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13857,7 +19219,9 @@ def test_get_big_query_export_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_big_query_export._get_unset_required_fields(jsonified_request) + ).get_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13871,7 +19235,9 @@ def test_get_big_query_export_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() + return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13891,30 +19257,36 @@ def test_get_big_query_export_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_big_query_export(request) + response = client.get_security_health_analytics_custom_module(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_big_query_export_rest_unset_required_fields(): +def test_get_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_big_query_export._get_unset_required_fields({}) + unset_fields = transport.get_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_big_query_export_rest_interceptors(null_interceptor): +def test_get_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13927,14 +19299,18 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_big_query_export" + transports.SecurityCenterRestInterceptor, + "post_get_security_health_analytics_custom_module", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_big_query_export" + transports.SecurityCenterRestInterceptor, + "pre_get_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetBigQueryExportRequest.pb( - securitycenter_service.GetBigQueryExportRequest() + pb_message = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) ) transcode.return_value = { "method": "post", @@ -13946,19 +19322,21 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json( - bigquery_export.BigQueryExport() + req.return_value._content = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - request = securitycenter_service.GetBigQueryExportRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() + post.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) - client.get_big_query_export( + client.get_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -13970,9 +19348,9 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_big_query_export_rest_bad_request( +def test_get_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.GetBigQueryExportRequest, + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13980,7 +19358,9 @@ def test_get_big_query_export_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13992,10 +19372,10 @@ def test_get_big_query_export_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_big_query_export(request) + client.get_security_health_analytics_custom_module(request) -def test_get_big_query_export_rest_flattened(): +def test_get_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14004,10 +19384,14 @@ def test_get_big_query_export_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() + return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/bigQueryExports/sample2"} + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } # get truthy value for each flattened field mock_args = dict( @@ -14018,24 +19402,29 @@ def test_get_big_query_export_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_big_query_export(**mock_args) + client.get_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" + % client.transport._host, args[1], ) -def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): +def test_get_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14044,13 +19433,13 @@ def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) -def test_get_big_query_export_rest_error(): +def test_get_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14059,53 +19448,57 @@ def test_get_big_query_export_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.GetIamPolicyRequest, + securitycenter_service.GetSourceRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_source_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = {"name": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + return_value = source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get_source(request) # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_get_iam_policy_rest_required_fields( - request_type=iam_policy_pb2.GetIamPolicyRequest, +def test_get_source_rest_required_fields( + request_type=securitycenter_service.GetSourceRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["resource"] = "" + request_init["name"] = "" request = request_type(**request_init) - pb_request = request + pb_request = request_type.pb(request) jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -14118,21 +19511,21 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get_source._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["resource"] = "resource_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get_source._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14141,7 +19534,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = source.Source() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14150,42 +19543,41 @@ def test_get_iam_policy_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request + pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get_source(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_source_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource",))) + unset_fields = transport.get_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_source_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14198,13 +19590,15 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_iam_policy" + transports.SecurityCenterRestInterceptor, "post_get_source" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_iam_policy" + transports.SecurityCenterRestInterceptor, "pre_get_source" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() + pb_message = securitycenter_service.GetSourceRequest.pb( + securitycenter_service.GetSourceRequest() + ) transcode.return_value = { "method": "post", "uri": "my_uri", @@ -14215,17 +19609,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + req.return_value._content = source.Source.to_json(source.Source()) - request = iam_policy_pb2.GetIamPolicyRequest() + request = securitycenter_service.GetSourceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() + post.return_value = source.Source() - client.get_iam_policy( + client.get_source( request, metadata=[ ("key", "val"), @@ -14237,8 +19631,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.GetIamPolicyRequest +def test_get_source_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GetSourceRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14246,7 +19640,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = {"name": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14258,10 +19652,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get_source(request) -def test_get_iam_policy_rest_flattened(): +def test_get_source_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14270,39 +19664,37 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = source.Source() # get arguments that satisfy an http rule for this method - sample_request = {"resource": "organizations/sample1/sources/sample2"} + sample_request = {"name": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - resource="resource_value", + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get_source(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" - % client.transport._host, - args[1], + "%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1] ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_source_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14311,13 +19703,13 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource="resource_value", + client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) -def test_get_iam_policy_rest_error(): +def test_get_source_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14326,57 +19718,52 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetMuteConfigRequest, + securitycenter_service.GroupAssetsRequest, dict, ], ) -def test_get_mute_config_rest(request_type): +def test_group_assets_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + return_value = securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_mute_config(request) + response = client.group_assets(request) # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_mute_config_rest_required_fields( - request_type=securitycenter_service.GetMuteConfigRequest, +def test_group_assets_rest_required_fields( + request_type=securitycenter_service.GroupAssetsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" + request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14391,21 +19778,24 @@ def test_get_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_mute_config._get_unset_required_fields(jsonified_request) + ).group_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" + jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_mute_config._get_unset_required_fields(jsonified_request) + ).group_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14414,7 +19804,7 @@ def test_get_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() + return_value = securitycenter_service.GroupAssetsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14426,38 +19816,49 @@ def test_get_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupAssetsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_mute_config(request) + response = client.group_assets(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_mute_config_rest_unset_required_fields(): +def test_group_assets_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.group_assets._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "groupBy", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_mute_config_rest_interceptors(null_interceptor): +def test_group_assets_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14470,14 +19871,14 @@ def test_get_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_mute_config" + transports.SecurityCenterRestInterceptor, "post_group_assets" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_mute_config" + transports.SecurityCenterRestInterceptor, "pre_group_assets" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetMuteConfigRequest.pb( - securitycenter_service.GetMuteConfigRequest() + pb_message = securitycenter_service.GroupAssetsRequest.pb( + securitycenter_service.GroupAssetsRequest() ) transcode.return_value = { "method": "post", @@ -14489,19 +19890,19 @@ def test_get_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = mute_config.MuteConfig.to_json( - mute_config.MuteConfig() + req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json( + securitycenter_service.GroupAssetsResponse() ) - request = securitycenter_service.GetMuteConfigRequest() + request = securitycenter_service.GroupAssetsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = mute_config.MuteConfig() + post.return_value = securitycenter_service.GroupAssetsResponse() - client.get_mute_config( + client.group_assets( request, metadata=[ ("key", "val"), @@ -14513,8 +19914,8 @@ def test_get_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GetMuteConfigRequest +def test_group_assets_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GroupAssetsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14522,7 +19923,7 @@ def test_get_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14534,125 +19935,121 @@ def test_get_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_mute_config(request) + client.group_assets(request) -def test_get_mute_config_rest_flattened(): +def test_group_assets_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} - - # get truthy value for each flattened field - mock_args = dict( - name="name_value", - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.get_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, - args[1], + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), ) + # Two responses for two calls + response = response + response + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.GroupAssetsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values -def test_get_mute_config_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) + sample_request = {"parent": "organizations/sample1"} - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name="name_value", - ) + pager = client.group_assets(request=sample_request) + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_get_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + pages = list(client.group_assets(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetNotificationConfigRequest, + securitycenter_service.GroupFindingsRequest, dict, ], ) -def test_get_notification_config_rest(request_type): +def test_group_findings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + return_value = securitycenter_service.GroupFindingsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_notification_config(request) + response = client.group_findings(request) # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_notification_config_rest_required_fields( - request_type=securitycenter_service.GetNotificationConfigRequest, +def test_group_findings_rest_required_fields( + request_type=securitycenter_service.GroupFindingsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" + request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14667,21 +20064,24 @@ def test_get_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_notification_config._get_unset_required_fields(jsonified_request) + ).group_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" + jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_notification_config._get_unset_required_fields(jsonified_request) + ).group_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14690,7 +20090,7 @@ def test_get_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() + return_value = securitycenter_service.GroupFindingsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14702,38 +20102,49 @@ def test_get_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_notification_config(request) + response = client.group_findings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_notification_config_rest_unset_required_fields(): +def test_group_findings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.group_findings._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "groupBy", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): +def test_group_findings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14746,14 +20157,14 @@ def test_get_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_notification_config" + transports.SecurityCenterRestInterceptor, "post_group_findings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_notification_config" + transports.SecurityCenterRestInterceptor, "pre_group_findings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb( - securitycenter_service.GetNotificationConfigRequest() + pb_message = securitycenter_service.GroupFindingsRequest.pb( + securitycenter_service.GroupFindingsRequest() ) transcode.return_value = { "method": "post", @@ -14765,19 +20176,21 @@ def test_get_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json( - notification_config.NotificationConfig() + req.return_value._content = ( + securitycenter_service.GroupFindingsResponse.to_json( + securitycenter_service.GroupFindingsResponse() + ) ) - request = securitycenter_service.GetNotificationConfigRequest() + request = securitycenter_service.GroupFindingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() + post.return_value = securitycenter_service.GroupFindingsResponse() - client.get_notification_config( + client.group_findings( request, metadata=[ ("key", "val"), @@ -14789,9 +20202,8 @@ def test_get_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_notification_config_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.GetNotificationConfigRequest, +def test_group_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GroupFindingsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14799,7 +20211,7 @@ def test_get_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14811,10 +20223,10 @@ def test_get_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_notification_config(request) + client.group_findings(request) -def test_get_notification_config_rest_flattened(): +def test_group_findings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14823,39 +20235,40 @@ def test_get_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() + return_value = securitycenter_service.GroupFindingsResponse() # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + sample_request = {"parent": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - name="name_value", + parent="parent_value", + group_by="group_by_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_notification_config(**mock_args) + client.group_findings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/notificationConfigs/*}" + "%s/v1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1], ) -def test_get_notification_config_rest_flattened_error(transport: str = "rest"): +def test_group_findings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14864,66 +20277,124 @@ def test_get_notification_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name="name_value", + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", ) -def test_get_notification_config_rest_error(): +def test_group_findings_rest_pager(transport: str = "rest"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.GroupFindingsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"parent": "organizations/sample1/sources/sample2"} + + pager = client.group_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + + pages = list(client.group_findings(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, + securitycenter_service.ListAssetsRequest, dict, ], ) -def test_get_organization_settings_rest(request_type): +def test_list_assets_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/organizationSettings"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name="name_value", - enable_asset_discovery=True, + return_value = securitycenter_service.ListAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_organization_settings(request) + response = client.list_assets(request) # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_organization_settings_rest_required_fields( - request_type=securitycenter_service.GetOrganizationSettingsRequest, +def test_list_assets_rest_required_fields( + request_type=securitycenter_service.ListAssetsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14938,21 +20409,33 @@ def test_get_organization_settings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_organization_settings._get_unset_required_fields(jsonified_request) + ).list_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_organization_settings._get_unset_required_fields(jsonified_request) + ).list_assets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "compare_duration", + "field_mask", + "filter", + "order_by", + "page_size", + "page_token", + "read_time", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14961,7 +20444,7 @@ def test_get_organization_settings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() + return_value = securitycenter_service.ListAssetsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14981,32 +20464,43 @@ def test_get_organization_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb( - return_value - ) + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_organization_settings(request) + response = client.list_assets(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_organization_settings_rest_unset_required_fields(): +def test_list_assets_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.list_assets._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "compareDuration", + "fieldMask", + "filter", + "orderBy", + "pageSize", + "pageToken", + "readTime", + ) + ) + & set(("parent",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): +def test_list_assets_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15019,14 +20513,14 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_organization_settings" + transports.SecurityCenterRestInterceptor, "post_list_assets" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_organization_settings" + transports.SecurityCenterRestInterceptor, "pre_list_assets" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb( - securitycenter_service.GetOrganizationSettingsRequest() + pb_message = securitycenter_service.ListAssetsRequest.pb( + securitycenter_service.ListAssetsRequest() ) transcode.return_value = { "method": "post", @@ -15038,19 +20532,19 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json( - organization_settings.OrganizationSettings() + req.return_value._content = securitycenter_service.ListAssetsResponse.to_json( + securitycenter_service.ListAssetsResponse() ) - request = securitycenter_service.GetOrganizationSettingsRequest() + request = securitycenter_service.ListAssetsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() + post.return_value = securitycenter_service.ListAssetsResponse() - client.get_organization_settings( + client.list_assets( request, metadata=[ ("key", "val"), @@ -15062,9 +20556,8 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_organization_settings_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.GetOrganizationSettingsRequest, +def test_list_assets_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListAssetsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15072,7 +20565,7 @@ def test_get_organization_settings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/organizationSettings"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15084,123 +20577,127 @@ def test_get_organization_settings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_organization_settings(request) + client.list_assets(request) -def test_get_organization_settings_rest_flattened(): +def test_list_assets_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/organizationSettings"} - - # get truthy value for each flattened field - mock_args = dict( - name="name_value", + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token="abc", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token="def", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.get_organization_settings(**mock_args) + # Two responses for two calls + response = response + response - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{name=organizations/*/organizationSettings}" - % client.transport._host, - args[1], + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.ListAssetsResponse.to_json(x) for x in response ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + sample_request = {"parent": "organizations/sample1"} -def test_get_organization_settings_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) + pager = client.list_assets(request=sample_request) - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name="name_value", + results = list(pager) + assert len(results) == 6 + assert all( + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results ) - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + pages = list(client.list_assets(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetSourceRequest, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_get_source_rest(request_type): +def test_list_descendant_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = source.Source( - name="name_value", - display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", + return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_source(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager + ) + assert response.next_page_token == "next_page_token_value" -def test_get_source_rest_required_fields( - request_type=securitycenter_service.GetSourceRequest, +def test_list_descendant_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15215,21 +20712,32 @@ def test_get_source_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_source._get_unset_required_fields(jsonified_request) + ).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_source._get_unset_required_fields(jsonified_request) + ).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "page_size", + "page_token", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15238,7 +20746,9 @@ def test_get_source_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = source.Source() + return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15258,30 +20768,46 @@ def test_get_source_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_source(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_source_rest_unset_required_fields(): +def test_list_descendant_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set( + ( + "pageSize", + "pageToken", + ) + ) + & set(("parent",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): +def test_list_descendant_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15294,14 +20820,16 @@ def test_get_source_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_source" + transports.SecurityCenterRestInterceptor, + "post_list_descendant_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_source" + transports.SecurityCenterRestInterceptor, + "pre_list_descendant_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb( - securitycenter_service.GetSourceRequest() + pb_message = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() ) transcode.return_value = { "method": "post", @@ -15313,17 +20841,23 @@ def test_get_source_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) + req.return_value._content = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = source.Source() + post.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) - client.get_source( + client.list_descendant_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -15335,8 +20869,9 @@ def test_get_source_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_source_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GetSourceRequest +def test_list_descendant_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15344,7 +20879,7 @@ def test_get_source_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15356,10 +20891,10 @@ def test_get_source_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_source(request) + client.list_descendant_security_health_analytics_custom_modules(request) -def test_get_source_rest_flattened(): +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15368,37 +20903,47 @@ def test_get_source_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = source.Source() + return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/sources/sample2"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } # get truthy value for each flattened field mock_args = dict( - name="name_value", + parent="parent_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_source(**mock_args) + client.list_descendant_security_health_analytics_custom_modules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1] + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant" + % client.transport._host, + args[1], ) -def test_get_source_rest_flattened_error(transport: str = "rest"): +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15407,39 +20952,115 @@ def test_get_source_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name="name_value", + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) -def test_get_source_rest_error(): +def test_list_descendant_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + pager = client.list_descendant_security_health_analytics_custom_modules( + request=sample_request + ) + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + pages = list( + client.list_descendant_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupAssetsRequest, + securitycenter_service.ListFindingsRequest, dict, ], ) -def test_group_assets_rest(request_type): +def test_list_findings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( + return_value = securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) @@ -15447,27 +21068,26 @@ def test_group_assets_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_assets(request) + response = client.list_findings(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) + assert isinstance(response, pagers.ListFindingsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_group_assets_rest_required_fields( - request_type=securitycenter_service.GroupAssetsRequest, +def test_list_findings_rest_required_fields( + request_type=securitycenter_service.ListFindingsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["parent"] = "" - request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15482,24 +21102,33 @@ def test_group_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_assets._get_unset_required_fields(jsonified_request) + ).list_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["parent"] = "parent_value" - jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_assets._get_unset_required_fields(jsonified_request) + ).list_findings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "compare_duration", + "field_mask", + "filter", + "order_by", + "page_size", + "page_token", + "read_time", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "parent" in jsonified_request assert jsonified_request["parent"] == "parent_value" - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15508,7 +21137,7 @@ def test_group_assets_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() + return_value = securitycenter_service.ListFindingsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15520,16 +21149,15 @@ def test_group_assets_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb( + pb_return_value = securitycenter_service.ListFindingsResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -15537,32 +21165,37 @@ def test_group_assets_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_assets(request) + response = client.list_findings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_group_assets_rest_unset_required_fields(): +def test_list_findings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.group_assets._get_unset_required_fields({}) + unset_fields = transport.list_findings._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "parent", - "groupBy", + "compareDuration", + "fieldMask", + "filter", + "orderBy", + "pageSize", + "pageToken", + "readTime", ) ) + & set(("parent",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): +def test_list_findings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15575,14 +21208,14 @@ def test_group_assets_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_group_assets" + transports.SecurityCenterRestInterceptor, "post_list_findings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_group_assets" + transports.SecurityCenterRestInterceptor, "pre_list_findings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb( - securitycenter_service.GroupAssetsRequest() + pb_message = securitycenter_service.ListFindingsRequest.pb( + securitycenter_service.ListFindingsRequest() ) transcode.return_value = { "method": "post", @@ -15594,19 +21227,19 @@ def test_group_assets_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json( - securitycenter_service.GroupAssetsResponse() + req.return_value._content = securitycenter_service.ListFindingsResponse.to_json( + securitycenter_service.ListFindingsResponse() ) - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.ListFindingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() + post.return_value = securitycenter_service.ListFindingsResponse() - client.group_assets( + client.list_findings( request, metadata=[ ("key", "val"), @@ -15618,8 +21251,8 @@ def test_group_assets_rest_interceptors(null_interceptor): post.assert_called_once() -def test_group_assets_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GroupAssetsRequest +def test_list_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListFindingsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15627,7 +21260,7 @@ def test_group_assets_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15639,10 +21272,10 @@ def test_group_assets_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.group_assets(request) + client.list_findings(request) -def test_group_assets_rest_pager(transport: str = "rest"): +def test_list_findings_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15654,28 +21287,28 @@ def test_group_assets_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), ) @@ -15684,7 +21317,7 @@ def test_group_assets_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.GroupAssetsResponse.to_json(x) for x in response + securitycenter_service.ListFindingsResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -15692,15 +21325,20 @@ def test_group_assets_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1"} + sample_request = {"parent": "organizations/sample1/sources/sample2"} - pager = client.group_assets(request=sample_request) + pager = client.list_findings(request=sample_request) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + assert all( + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in results + ) - pages = list(client.group_assets(request=sample_request).pages) + pages = list(client.list_findings(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -15708,52 +21346,51 @@ def test_group_assets_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupFindingsRequest, + securitycenter_service.ListMuteConfigsRequest, dict, ], ) -def test_group_findings_rest(request_type): +def test_list_mute_configs_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( + return_value = securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_findings(request) + response = client.list_mute_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) + assert isinstance(response, pagers.ListMuteConfigsPager) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_group_findings_rest_required_fields( - request_type=securitycenter_service.GroupFindingsRequest, +def test_list_mute_configs_rest_required_fields( + request_type=securitycenter_service.ListMuteConfigsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["parent"] = "" - request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15768,24 +21405,28 @@ def test_group_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_findings._get_unset_required_fields(jsonified_request) + ).list_mute_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["parent"] = "parent_value" - jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_findings._get_unset_required_fields(jsonified_request) + ).list_mute_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "page_size", + "page_token", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "parent" in jsonified_request assert jsonified_request["parent"] == "parent_value" - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15794,7 +21435,7 @@ def test_group_findings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() + return_value = securitycenter_service.ListMuteConfigsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15806,16 +21447,15 @@ def test_group_findings_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb( + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -15823,32 +21463,32 @@ def test_group_findings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_findings(request) + response = client.list_mute_configs(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_group_findings_rest_unset_required_fields(): +def test_list_mute_configs_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.group_findings._get_unset_required_fields({}) + unset_fields = transport.list_mute_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "parent", - "groupBy", + "pageSize", + "pageToken", ) ) + & set(("parent",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): +def test_list_mute_configs_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15861,14 +21501,14 @@ def test_group_findings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_group_findings" + transports.SecurityCenterRestInterceptor, "post_list_mute_configs" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_group_findings" + transports.SecurityCenterRestInterceptor, "pre_list_mute_configs" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb( - securitycenter_service.GroupFindingsRequest() + pb_message = securitycenter_service.ListMuteConfigsRequest.pb( + securitycenter_service.ListMuteConfigsRequest() ) transcode.return_value = { "method": "post", @@ -15881,20 +21521,20 @@ def test_group_findings_rest_interceptors(null_interceptor): req.return_value.status_code = 200 req.return_value.request = PreparedRequest() req.return_value._content = ( - securitycenter_service.GroupFindingsResponse.to_json( - securitycenter_service.GroupFindingsResponse() + securitycenter_service.ListMuteConfigsResponse.to_json( + securitycenter_service.ListMuteConfigsResponse() ) ) - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.ListMuteConfigsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() + post.return_value = securitycenter_service.ListMuteConfigsResponse() - client.group_findings( + client.list_mute_configs( request, metadata=[ ("key", "val"), @@ -15906,8 +21546,8 @@ def test_group_findings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_group_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GroupFindingsRequest +def test_list_mute_configs_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListMuteConfigsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15915,7 +21555,7 @@ def test_group_findings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15927,10 +21567,10 @@ def test_group_findings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.group_findings(request) + client.list_mute_configs(request) -def test_group_findings_rest_flattened(): +def test_list_mute_configs_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15939,40 +21579,40 @@ def test_group_findings_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() + return_value = securitycenter_service.ListMuteConfigsResponse() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"parent": "organizations/sample1"} # get truthy value for each flattened field mock_args = dict( parent="parent_value", - group_by="group_by_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.group_findings(**mock_args) + client.list_mute_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*/sources/*}/findings:group" - % client.transport._host, + "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1], ) -def test_group_findings_rest_flattened_error(transport: str = "rest"): +def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15981,14 +21621,13 @@ def test_group_findings_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", - group_by="group_by_value", ) -def test_group_findings_rest_pager(transport: str = "rest"): +def test_list_mute_configs_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16000,28 +21639,28 @@ def test_group_findings_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), ) @@ -16030,7 +21669,7 @@ def test_group_findings_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.GroupFindingsResponse.to_json(x) for x in response + securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16038,15 +21677,15 @@ def test_group_findings_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"parent": "organizations/sample1"} - pager = client.group_findings(request=sample_request) + pager = client.list_mute_configs(request=sample_request) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + assert all(isinstance(i, mute_config.MuteConfig) for i in results) - pages = list(client.group_findings(request=sample_request).pages) + pages = list(client.list_mute_configs(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16054,11 +21693,11 @@ def test_group_findings_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListAssetsRequest, + securitycenter_service.ListNotificationConfigsRequest, dict, ], ) -def test_list_assets_rest(request_type): +def test_list_notification_configs_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -16071,29 +21710,29 @@ def test_list_assets_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( + return_value = securitycenter_service.ListNotificationConfigsResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_assets(request) + response = client.list_notification_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) + assert isinstance(response, pagers.ListNotificationConfigsPager) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_list_assets_rest_required_fields( - request_type=securitycenter_service.ListAssetsRequest, +def test_list_notification_configs_rest_required_fields( + request_type=securitycenter_service.ListNotificationConfigsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16113,7 +21752,7 @@ def test_list_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_assets._get_unset_required_fields(jsonified_request) + ).list_notification_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16122,17 +21761,12 @@ def test_list_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_assets._get_unset_required_fields(jsonified_request) + ).list_notification_configs._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "compare_duration", - "field_mask", - "filter", - "order_by", "page_size", "page_token", - "read_time", ) ) jsonified_request.update(unset_fields) @@ -16148,7 +21782,7 @@ def test_list_assets_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() + return_value = securitycenter_service.ListNotificationConfigsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16168,35 +21802,32 @@ def test_list_assets_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_assets(request) + response = client.list_notification_configs(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_assets_rest_unset_required_fields(): +def test_list_notification_configs_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_assets._get_unset_required_fields({}) + unset_fields = transport.list_notification_configs._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "compareDuration", - "fieldMask", - "filter", - "orderBy", "pageSize", "pageToken", - "readTime", ) ) & set(("parent",)) @@ -16204,7 +21835,7 @@ def test_list_assets_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): +def test_list_notification_configs_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16217,14 +21848,14 @@ def test_list_assets_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_assets" + transports.SecurityCenterRestInterceptor, "post_list_notification_configs" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_assets" + transports.SecurityCenterRestInterceptor, "pre_list_notification_configs" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb( - securitycenter_service.ListAssetsRequest() + pb_message = securitycenter_service.ListNotificationConfigsRequest.pb( + securitycenter_service.ListNotificationConfigsRequest() ) transcode.return_value = { "method": "post", @@ -16236,19 +21867,21 @@ def test_list_assets_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json( - securitycenter_service.ListAssetsResponse() + req.return_value._content = ( + securitycenter_service.ListNotificationConfigsResponse.to_json( + securitycenter_service.ListNotificationConfigsResponse() + ) ) - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.ListNotificationConfigsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() + post.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_assets( + client.list_notification_configs( request, metadata=[ ("key", "val"), @@ -16260,31 +21893,90 @@ def test_list_assets_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_assets_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListAssetsRequest -): +def test_list_notification_configs_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListNotificationConfigsRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_notification_configs(request) + + +def test_list_notification_configs_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_notification_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/notificationConfigs" + % client.transport._host, + args[1], + ) + + +def test_list_notification_configs_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent="parent_value", + ) -def test_list_assets_rest_pager(transport: str = "rest"): +def test_list_notification_configs_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16296,28 +21988,28 @@ def test_list_assets_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), ], ), ) @@ -16326,7 +22018,8 @@ def test_list_assets_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListAssetsResponse.to_json(x) for x in response + securitycenter_service.ListNotificationConfigsResponse.to_json(x) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16336,16 +22029,15 @@ def test_list_assets_rest_pager(transport: str = "rest"): sample_request = {"parent": "organizations/sample1"} - pager = client.list_assets(request=sample_request) + pager = client.list_notification_configs(request=sample_request) results = list(pager) assert len(results) == 6 assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results + isinstance(i, notification_config.NotificationConfig) for i in results ) - pages = list(client.list_assets(request=sample_request).pages) + pages = list(client.list_notification_configs(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16353,46 +22045,50 @@ def test_list_assets_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListFindingsRequest, + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_findings_rest(request_type): +def test_list_effective_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( + return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_findings(request) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager + ) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_list_findings_rest_required_fields( - request_type=securitycenter_service.ListFindingsRequest, +def test_list_effective_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16412,7 +22108,9 @@ def test_list_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_findings._get_unset_required_fields(jsonified_request) + ).list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16421,17 +22119,14 @@ def test_list_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_findings._get_unset_required_fields(jsonified_request) + ).list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "compare_duration", - "field_mask", - "filter", - "order_by", "page_size", "page_token", - "read_time", ) ) jsonified_request.update(unset_fields) @@ -16447,7 +22142,9 @@ def test_list_findings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() + return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16467,7 +22164,7 @@ def test_list_findings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb( + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -16475,29 +22172,28 @@ def test_list_findings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_findings(request) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_findings_rest_unset_required_fields(): +def test_list_effective_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_findings._get_unset_required_fields({}) + unset_fields = transport.list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) assert set(unset_fields) == ( set( ( - "compareDuration", - "fieldMask", - "filter", - "orderBy", "pageSize", "pageToken", - "readTime", ) ) & set(("parent",)) @@ -16505,7 +22201,9 @@ def test_list_findings_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): +def test_list_effective_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16518,14 +22216,16 @@ def test_list_findings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_findings" + transports.SecurityCenterRestInterceptor, + "post_list_effective_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_findings" + transports.SecurityCenterRestInterceptor, + "pre_list_effective_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb( - securitycenter_service.ListFindingsRequest() + pb_message = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() ) transcode.return_value = { "method": "post", @@ -16537,19 +22237,23 @@ def test_list_findings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json( - securitycenter_service.ListFindingsResponse() + req.return_value._content = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() ) - request = securitycenter_service.ListFindingsRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() + post.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) - client.list_findings( + client.list_effective_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -16561,8 +22265,9 @@ def test_list_findings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListFindingsRequest +def test_list_effective_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -16570,7 +22275,7 @@ def test_list_findings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16582,10 +22287,76 @@ def test_list_findings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_findings(request) + client.list_effective_security_health_analytics_custom_modules(request) -def test_list_findings_rest_pager(transport: str = "rest"): +def test_list_effective_security_health_analytics_custom_modules_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + + # get arguments that satisfy an http rule for this method + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_effective_security_health_analytics_custom_modules(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules" + % client.transport._host, + args[1], + ) + + +def test_list_effective_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", + ) + + +def test_list_effective_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16597,28 +22368,28 @@ def test_list_findings_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], ), ) @@ -16627,7 +22398,10 @@ def test_list_findings_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListFindingsResponse.to_json(x) for x in response + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16635,20 +22409,29 @@ def test_list_findings_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } - pager = client.list_findings(request=sample_request) + pager = client.list_effective_security_health_analytics_custom_modules( + request=sample_request + ) results = list(pager) assert len(results) == 6 assert all( isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, ) for i in results ) - pages = list(client.list_findings(request=sample_request).pages) + pages = list( + client.list_effective_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16656,46 +22439,50 @@ def test_list_findings_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListMuteConfigsRequest, + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_mute_configs_rest(request_type): +def test_list_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token="next_page_token_value", + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( - return_value + pb_return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_mute_configs(request) + response = client.list_security_health_analytics_custom_modules(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) assert response.next_page_token == "next_page_token_value" -def test_list_mute_configs_rest_required_fields( - request_type=securitycenter_service.ListMuteConfigsRequest, +def test_list_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16715,7 +22502,9 @@ def test_list_mute_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_mute_configs._get_unset_required_fields(jsonified_request) + ).list_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16724,7 +22513,9 @@ def test_list_mute_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_mute_configs._get_unset_required_fields(jsonified_request) + ).list_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -16745,7 +22536,9 @@ def test_list_mute_configs_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16765,7 +22558,7 @@ def test_list_mute_configs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -16773,19 +22566,21 @@ def test_list_mute_configs_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_mute_configs(request) + response = client.list_security_health_analytics_custom_modules(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_mute_configs_rest_unset_required_fields(): +def test_list_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_mute_configs._get_unset_required_fields({}) + unset_fields = transport.list_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) assert set(unset_fields) == ( set( ( @@ -16798,7 +22593,9 @@ def test_list_mute_configs_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_mute_configs_rest_interceptors(null_interceptor): +def test_list_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16811,14 +22608,18 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_mute_configs" + transports.SecurityCenterRestInterceptor, + "post_list_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_mute_configs" + transports.SecurityCenterRestInterceptor, + "pre_list_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListMuteConfigsRequest.pb( - securitycenter_service.ListMuteConfigsRequest() + pb_message = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) ) transcode.return_value = { "method": "post", @@ -16830,21 +22631,23 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - securitycenter_service.ListMuteConfigsResponse.to_json( - securitycenter_service.ListMuteConfigsResponse() - ) + req.return_value._content = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() ) - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListMuteConfigsResponse() + post.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) - client.list_mute_configs( + client.list_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -16856,8 +22659,9 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_mute_configs_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListMuteConfigsRequest +def test_list_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -16865,7 +22669,7 @@ def test_list_mute_configs_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16877,10 +22681,10 @@ def test_list_mute_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_mute_configs(request) + client.list_security_health_analytics_custom_modules(request) -def test_list_mute_configs_rest_flattened(): +def test_list_security_health_analytics_custom_modules_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -16889,10 +22693,14 @@ def test_list_mute_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } # get truthy value for each flattened field mock_args = dict( @@ -16903,26 +22711,31 @@ def test_list_mute_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( - return_value + pb_return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_mute_configs(**mock_args) + client.list_security_health_analytics_custom_modules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" + % client.transport._host, args[1], ) -def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): +def test_list_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16931,13 +22744,15 @@ def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) -def test_list_mute_configs_rest_pager(transport: str = "rest"): +def test_list_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16949,28 +22764,28 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), ) @@ -16979,7 +22794,10 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16987,15 +22805,29 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } - pager = client.list_mute_configs(request=sample_request) + pager = client.list_security_health_analytics_custom_modules( + request=sample_request + ) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in results) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) - pages = list(client.list_mute_configs(request=sample_request).pages) + pages = list( + client.list_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -17003,11 +22835,11 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListNotificationConfigsRequest, + securitycenter_service.ListSourcesRequest, dict, ], ) -def test_list_notification_configs_rest(request_type): +def test_list_sources_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17020,29 +22852,27 @@ def test_list_notification_configs_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( + return_value = securitycenter_service.ListSourcesResponse( next_page_token="next_page_token_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( - return_value - ) + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_notification_configs(request) + response = client.list_sources(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) + assert isinstance(response, pagers.ListSourcesPager) assert response.next_page_token == "next_page_token_value" -def test_list_notification_configs_rest_required_fields( - request_type=securitycenter_service.ListNotificationConfigsRequest, +def test_list_sources_rest_required_fields( + request_type=securitycenter_service.ListSourcesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -17062,7 +22892,7 @@ def test_list_notification_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_notification_configs._get_unset_required_fields(jsonified_request) + ).list_sources._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -17071,7 +22901,7 @@ def test_list_notification_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_notification_configs._get_unset_required_fields(jsonified_request) + ).list_sources._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -17092,7 +22922,7 @@ def test_list_notification_configs_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() + return_value = securitycenter_service.ListSourcesResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17112,7 +22942,7 @@ def test_list_notification_configs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + pb_return_value = securitycenter_service.ListSourcesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -17120,19 +22950,19 @@ def test_list_notification_configs_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_notification_configs(request) + response = client.list_sources(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_notification_configs_rest_unset_required_fields(): +def test_list_sources_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) + unset_fields = transport.list_sources._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( @@ -17145,7 +22975,7 @@ def test_list_notification_configs_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): +def test_list_sources_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17158,14 +22988,14 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_notification_configs" + transports.SecurityCenterRestInterceptor, "post_list_sources" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_notification_configs" + transports.SecurityCenterRestInterceptor, "pre_list_sources" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb( - securitycenter_service.ListNotificationConfigsRequest() + pb_message = securitycenter_service.ListSourcesRequest.pb( + securitycenter_service.ListSourcesRequest() ) transcode.return_value = { "method": "post", @@ -17177,21 +23007,19 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - securitycenter_service.ListNotificationConfigsResponse.to_json( - securitycenter_service.ListNotificationConfigsResponse() - ) + req.return_value._content = securitycenter_service.ListSourcesResponse.to_json( + securitycenter_service.ListSourcesResponse() ) - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListSourcesRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() + post.return_value = securitycenter_service.ListSourcesResponse() - client.list_notification_configs( + client.list_sources( request, metadata=[ ("key", "val"), @@ -17203,9 +23031,8 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_notification_configs_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.ListNotificationConfigsRequest, +def test_list_sources_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListSourcesRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17225,10 +23052,10 @@ def test_list_notification_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_notification_configs(request) + client.list_sources(request) -def test_list_notification_configs_rest_flattened(): +def test_list_sources_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17237,7 +23064,7 @@ def test_list_notification_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() + return_value = securitycenter_service.ListSourcesResponse() # get arguments that satisfy an http rule for this method sample_request = {"parent": "organizations/sample1"} @@ -17251,27 +23078,23 @@ def test_list_notification_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( - return_value - ) + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_notification_configs(**mock_args) + client.list_sources(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/notificationConfigs" - % client.transport._host, - args[1], + "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] ) -def test_list_notification_configs_rest_flattened_error(transport: str = "rest"): +def test_list_sources_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17280,13 +23103,13 @@ def test_list_notification_configs_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), + client.list_sources( + securitycenter_service.ListSourcesRequest(), parent="parent_value", ) -def test_list_notification_configs_rest_pager(transport: str = "rest"): +def test_list_sources_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17298,28 +23121,28 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListSourcesResponse( + sources=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), ], ), ) @@ -17328,8 +23151,7 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListNotificationConfigsResponse.to_json(x) - for x in response + securitycenter_service.ListSourcesResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -17339,15 +23161,13 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): sample_request = {"parent": "organizations/sample1"} - pager = client.list_notification_configs(request=sample_request) + pager = client.list_sources(request=sample_request) results = list(pager) assert len(results) == 6 - assert all( - isinstance(i, notification_config.NotificationConfig) for i in results - ) + assert all(isinstance(i, source.Source) for i in results) - pages = list(client.list_notification_configs(request=sample_request).pages) + pages = list(client.list_sources(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -17355,11 +23175,11 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListSourcesRequest, + securitycenter_service.RunAssetDiscoveryRequest, dict, ], ) -def test_list_sources_rest(request_type): +def test_run_asset_discovery_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17372,27 +23192,23 @@ def test_list_sources_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token="next_page_token_value", - ) + return_value = operations_pb2.Operation(name="operations/spam") # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_sources(request) + response = client.run_asset_discovery(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == "next_page_token_value" + assert response.operation.name == "operations/spam" -def test_list_sources_rest_required_fields( - request_type=securitycenter_service.ListSourcesRequest, +def test_run_asset_discovery_rest_required_fields( + request_type=securitycenter_service.RunAssetDiscoveryRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -17412,7 +23228,7 @@ def test_list_sources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_sources._get_unset_required_fields(jsonified_request) + ).run_asset_discovery._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -17421,14 +23237,7 @@ def test_list_sources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "page_size", - "page_token", - ) - ) + ).run_asset_discovery._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -17442,7 +23251,7 @@ def test_list_sources_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() + return_value = operations_pb2.Operation(name="operations/spam") # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17454,48 +23263,37 @@ def test_list_sources_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_sources(request) + response = client.run_asset_discovery(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_sources_rest_unset_required_fields(): +def test_run_asset_discovery_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "pageSize", - "pageToken", - ) - ) - & set(("parent",)) - ) + unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): +def test_run_asset_discovery_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17508,14 +23306,16 @@ def test_list_sources_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_sources" + operation.Operation, "_set_result_from_operation" + ), mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_run_asset_discovery" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_sources" + transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb( - securitycenter_service.ListSourcesRequest() + pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb( + securitycenter_service.RunAssetDiscoveryRequest() ) transcode.return_value = { "method": "post", @@ -17527,19 +23327,19 @@ def test_list_sources_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json( - securitycenter_service.ListSourcesResponse() + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() ) - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() + post.return_value = operations_pb2.Operation() - client.list_sources( + client.run_asset_discovery( request, metadata=[ ("key", "val"), @@ -17551,8 +23351,9 @@ def test_list_sources_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_sources_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListSourcesRequest +def test_run_asset_discovery_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.RunAssetDiscoveryRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17572,10 +23373,10 @@ def test_list_sources_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_sources(request) + client.run_asset_discovery(request) -def test_list_sources_rest_flattened(): +def test_run_asset_discovery_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17584,7 +23385,7 @@ def test_list_sources_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() + return_value = operations_pb2.Operation(name="operations/spam") # get arguments that satisfy an http rule for this method sample_request = {"parent": "organizations/sample1"} @@ -17598,23 +23399,24 @@ def test_list_sources_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_sources(**mock_args) + client.run_asset_discovery(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] + "%s/v1/{parent=organizations/*}/assets:runDiscovery" + % client.transport._host, + args[1], ) -def test_list_sources_rest_flattened_error(transport: str = "rest"): +def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17623,117 +23425,92 @@ def test_list_sources_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), parent="parent_value", ) -def test_list_sources_rest_pager(transport: str = "rest"): +def test_run_asset_discovery_rest_error(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token="abc", - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token="def", - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - securitycenter_service.ListSourcesResponse.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"parent": "organizations/sample1"} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, + securitycenter_service.SetFindingStateRequest, dict, ], ) -def test_run_asset_discovery_rest(request_type): +def test_set_finding_state_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding( + name="name_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.run_asset_discovery(request) + response = client.set_finding_state(request) # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" + assert isinstance(response, finding.Finding) + assert response.name == "name_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_run_asset_discovery_rest_required_fields( - request_type=securitycenter_service.RunAssetDiscoveryRequest, +def test_set_finding_state_rest_required_fields( + request_type=securitycenter_service.SetFindingStateRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -17748,21 +23525,21 @@ def test_run_asset_discovery_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).run_asset_discovery._get_unset_required_fields(jsonified_request) + ).set_finding_state._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["parent"] = "parent_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).run_asset_discovery._get_unset_required_fields(jsonified_request) + ).set_finding_state._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17771,7 +23548,7 @@ def test_run_asset_discovery_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17791,29 +23568,40 @@ def test_run_asset_discovery_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.run_asset_discovery(request) + response = client.set_finding_state(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_run_asset_discovery_rest_unset_required_fields(): +def test_set_finding_state_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent",))) + unset_fields = transport.set_finding_state._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "name", + "state", + "startTime", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): +def test_set_finding_state_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17826,16 +23614,14 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - operation.Operation, "_set_result_from_operation" - ), mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_run_asset_discovery" + transports.SecurityCenterRestInterceptor, "post_set_finding_state" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery" + transports.SecurityCenterRestInterceptor, "pre_set_finding_state" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb( - securitycenter_service.RunAssetDiscoveryRequest() + pb_message = securitycenter_service.SetFindingStateRequest.pb( + securitycenter_service.SetFindingStateRequest() ) transcode.return_value = { "method": "post", @@ -17847,19 +23633,17 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) + req.return_value._content = finding.Finding.to_json(finding.Finding()) - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.SetFindingStateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() + post.return_value = finding.Finding() - client.run_asset_discovery( + client.set_finding_state( request, metadata=[ ("key", "val"), @@ -17871,9 +23655,8 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): post.assert_called_once() -def test_run_asset_discovery_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.RunAssetDiscoveryRequest, +def test_set_finding_state_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.SetFindingStateRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17881,7 +23664,7 @@ def test_run_asset_discovery_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17893,10 +23676,10 @@ def test_run_asset_discovery_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.run_asset_discovery(request) + client.set_finding_state(request) -def test_run_asset_discovery_rest_flattened(): +def test_set_finding_state_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17905,38 +23688,43 @@ def test_run_asset_discovery_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "name": "organizations/sample1/sources/sample2/findings/sample3" + } # get truthy value for each flattened field mock_args = dict( - parent="parent_value", + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.run_asset_discovery(**mock_args) + client.set_finding_state(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/assets:runDiscovery" + "%s/v1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1], ) -def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): +def test_set_finding_state_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17945,13 +23733,15 @@ def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent="parent_value", + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) -def test_run_asset_discovery_rest_error(): +def test_set_finding_state_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -17960,11 +23750,11 @@ def test_run_asset_discovery_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.SetFindingStateRequest, + securitycenter_service.SetMuteRequest, dict, ], ) -def test_set_finding_state_rest(request_type): +def test_set_mute_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17992,6 +23782,7 @@ def test_set_finding_state_rest(request_type): parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) # Wrap the value into a proper Response obj @@ -18002,7 +23793,7 @@ def test_set_finding_state_rest(request_type): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_finding_state(request) + response = client.set_mute(request) # Establish that the response is the type that we expect. assert isinstance(response, finding.Finding) @@ -18020,10 +23811,11 @@ def test_set_finding_state_rest(request_type): assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_set_finding_state_rest_required_fields( - request_type=securitycenter_service.SetFindingStateRequest, +def test_set_mute_rest_required_fields( + request_type=securitycenter_service.SetMuteRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -18043,7 +23835,7 @@ def test_set_finding_state_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_finding_state._get_unset_required_fields(jsonified_request) + ).set_mute._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -18052,7 +23844,7 @@ def test_set_finding_state_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_finding_state._get_unset_required_fields(jsonified_request) + ).set_mute._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -18093,33 +23885,32 @@ def test_set_finding_state_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_finding_state(request) + response = client.set_mute(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_finding_state_rest_unset_required_fields(): +def test_set_mute_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_finding_state._get_unset_required_fields({}) + unset_fields = transport.set_mute._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( "name", - "state", - "startTime", + "mute", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): +def test_set_mute_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18132,14 +23923,14 @@ def test_set_finding_state_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_finding_state" + transports.SecurityCenterRestInterceptor, "post_set_mute" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_finding_state" + transports.SecurityCenterRestInterceptor, "pre_set_mute" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb( - securitycenter_service.SetFindingStateRequest() + pb_message = securitycenter_service.SetMuteRequest.pb( + securitycenter_service.SetMuteRequest() ) transcode.return_value = { "method": "post", @@ -18153,7 +23944,7 @@ def test_set_finding_state_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = finding.Finding.to_json(finding.Finding()) - request = securitycenter_service.SetFindingStateRequest() + request = securitycenter_service.SetMuteRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -18161,7 +23952,7 @@ def test_set_finding_state_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = finding.Finding() - client.set_finding_state( + client.set_mute( request, metadata=[ ("key", "val"), @@ -18173,8 +23964,8 @@ def test_set_finding_state_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_finding_state_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.SetFindingStateRequest +def test_set_mute_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.SetMuteRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18194,10 +23985,10 @@ def test_set_finding_state_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_finding_state(request) + client.set_mute(request) -def test_set_finding_state_rest_flattened(): +def test_set_mute_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18216,8 +24007,7 @@ def test_set_finding_state_rest_flattened(): # get truthy value for each flattened field mock_args = dict( name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + mute=finding.Finding.Mute.MUTED, ) mock_args.update(sample_request) @@ -18229,20 +24019,20 @@ def test_set_finding_state_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_finding_state(**mock_args) + client.set_mute(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*/findings/*}:setState" + "%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" % client.transport._host, args[1], ) -def test_set_finding_state_rest_flattened_error(transport: str = "rest"): +def test_set_mute_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18251,15 +24041,14 @@ def test_set_finding_state_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), + client.set_mute( + securitycenter_service.SetMuteRequest(), name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + mute=finding.Finding.Mute.MUTED, ) -def test_set_finding_state_rest_error(): +def test_set_mute_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18268,77 +24057,53 @@ def test_set_finding_state_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.SetMuteRequest, + iam_policy_pb2.SetIamPolicyRequest, dict, ], ) -def test_set_mute_rest(request_type): +def test_set_iam_policy_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_mute(request) + response = client.set_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" -def test_set_mute_rest_required_fields( - request_type=securitycenter_service.SetMuteRequest, +def test_set_iam_policy_rest_required_fields( + request_type=iam_policy_pb2.SetIamPolicyRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["resource"] = "" request = request_type(**request_init) - pb_request = request_type.pb(request) + pb_request = request jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -18351,21 +24116,21 @@ def test_set_mute_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_mute._get_unset_required_fields(jsonified_request) + ).set_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_mute._get_unset_required_fields(jsonified_request) + ).set_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18374,7 +24139,7 @@ def test_set_mute_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = finding.Finding() + return_value = policy_pb2.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18383,7 +24148,7 @@ def test_set_mute_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request_type.pb(request) + pb_request = request transcode_result = { "uri": "v1/sample_method", "method": "post", @@ -18395,38 +24160,38 @@ def test_set_mute_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_mute(request) + response = client.set_iam_policy(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_mute_rest_unset_required_fields(): +def test_set_iam_policy_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_mute._get_unset_required_fields({}) + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( - "name", - "mute", + "resource", + "policy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_mute_rest_interceptors(null_interceptor): +def test_set_iam_policy_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18439,15 +24204,13 @@ def test_set_mute_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_mute" + transports.SecurityCenterRestInterceptor, "post_set_iam_policy" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_mute" + transports.SecurityCenterRestInterceptor, "pre_set_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.SetMuteRequest.pb( - securitycenter_service.SetMuteRequest() - ) + pb_message = iam_policy_pb2.SetIamPolicyRequest() transcode.return_value = { "method": "post", "uri": "my_uri", @@ -18458,17 +24221,17 @@ def test_set_mute_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - request = securitycenter_service.SetMuteRequest() + request = iam_policy_pb2.SetIamPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = finding.Finding() + post.return_value = policy_pb2.Policy() - client.set_mute( + client.set_iam_policy( request, metadata=[ ("key", "val"), @@ -18480,8 +24243,8 @@ def test_set_mute_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_mute_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.SetMuteRequest +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.SetIamPolicyRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18489,7 +24252,7 @@ def test_set_mute_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -18501,10 +24264,10 @@ def test_set_mute_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_mute(request) + client.set_iam_policy(request) -def test_set_mute_rest_flattened(): +def test_set_iam_policy_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18513,42 +24276,39 @@ def test_set_mute_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = finding.Finding() + return_value = policy_pb2.Policy() # get arguments that satisfy an http rule for this method - sample_request = { - "name": "organizations/sample1/sources/sample2/findings/sample3" - } + sample_request = {"resource": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - name="name_value", - mute=finding.Finding.Mute.MUTED, + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_mute(**mock_args) + client.set_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" + "%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1], ) -def test_set_mute_rest_flattened_error(transport: str = "rest"): +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18557,14 +24317,13 @@ def test_set_mute_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) -def test_set_mute_rest_error(): +def test_set_iam_policy_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18573,11 +24332,11 @@ def test_set_mute_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.SetIamPolicyRequest, + iam_policy_pb2.TestIamPermissionsRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_test_iam_permissions_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18590,9 +24349,8 @@ def test_set_iam_policy_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) # Wrap the value into a proper Response obj @@ -18603,21 +24361,21 @@ def test_set_iam_policy_rest(request_type): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_set_iam_policy_rest_required_fields( - request_type=iam_policy_pb2.SetIamPolicyRequest, +def test_test_iam_permissions_rest_required_fields( + request_type=iam_policy_pb2.TestIamPermissionsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["resource"] = "" + request_init["permissions"] = "" request = request_type(**request_init) pb_request = request jsonified_request = json.loads( @@ -18632,21 +24390,24 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["resource"] = "resource_value" + jsonified_request["permissions"] = "permissions_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "resource" in jsonified_request assert jsonified_request["resource"] == "resource_value" + assert "permissions" in jsonified_request + assert jsonified_request["permissions"] == "permissions_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18655,7 +24416,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = iam_policy_pb2.TestIamPermissionsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18682,32 +24443,32 @@ def test_set_iam_policy_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_test_iam_permissions_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( "resource", - "policy", + "permissions", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_test_iam_permissions_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18720,13 +24481,13 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_iam_policy" + transports.SecurityCenterRestInterceptor, "post_test_iam_permissions" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_iam_policy" + transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() + pb_message = iam_policy_pb2.TestIamPermissionsRequest() transcode.return_value = { "method": "post", "uri": "my_uri", @@ -18737,17 +24498,19 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + req.return_value._content = json_format.MessageToJson( + iam_policy_pb2.TestIamPermissionsResponse() + ) - request = iam_policy_pb2.SetIamPolicyRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() + post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.set_iam_policy( + client.test_iam_permissions( request, metadata=[ ("key", "val"), @@ -18759,8 +24522,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.SetIamPolicyRequest +def test_test_iam_permissions_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.TestIamPermissionsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18780,10 +24543,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.test_iam_permissions(request) -def test_set_iam_policy_rest_flattened(): +def test_test_iam_permissions_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18792,7 +24555,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = iam_policy_pb2.TestIamPermissionsResponse() # get arguments that satisfy an http rule for this method sample_request = {"resource": "organizations/sample1/sources/sample2"} @@ -18800,6 +24563,7 @@ def test_set_iam_policy_rest_flattened(): # get truthy value for each flattened field mock_args = dict( resource="resource_value", + permissions=["permissions_value"], ) mock_args.update(sample_request) @@ -18811,20 +24575,20 @@ def test_set_iam_policy_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.test_iam_permissions(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" + "%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18833,13 +24597,14 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), resource="resource_value", + permissions=["permissions_value"], ) -def test_set_iam_policy_rest_error(): +def test_test_iam_permissions_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18848,52 +24613,67 @@ def test_set_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, + securitycenter_service.UpdateExternalSystemRequest, dict, ], ) -def test_test_iam_permissions_rest(request_type): +def test_update_external_system_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } + request_init["external_system"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", + "assignees": ["assignees_value1", "assignees_value2"], + "external_uid": "external_uid_value", + "status": "status_value", + "external_system_update_time": {"seconds": 751, "nanos": 543}, + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], + return_value = gcs_external_system.ExternalSystem( + name="name_value", + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_external_system(request) # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, gcs_external_system.ExternalSystem) + assert response.name == "name_value" + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" -def test_test_iam_permissions_rest_required_fields( - request_type=iam_policy_pb2.TestIamPermissionsRequest, +def test_update_external_system_rest_required_fields( + request_type=securitycenter_service.UpdateExternalSystemRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" request = request_type(**request_init) - pb_request = request + pb_request = request_type.pb(request) jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -18906,24 +24686,19 @@ def test_test_iam_permissions_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_external_system._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["resource"] = "resource_value" - jsonified_request["permissions"] = "permissions_value" - unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_external_system._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == "permissions_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18932,7 +24707,7 @@ def test_test_iam_permissions_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() + return_value = gcs_external_system.ExternalSystem() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18941,10 +24716,10 @@ def test_test_iam_permissions_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request + pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": pb_request, } transcode_result["body"] = pb_request @@ -18953,38 +24728,30 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_external_system(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_test_iam_permissions_rest_unset_required_fields(): +def test_update_external_system_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(()) - & set( - ( - "resource", - "permissions", - ) - ) - ) + unset_fields = transport.update_external_system._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("externalSystem",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): +def test_update_external_system_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18997,13 +24764,15 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_test_iam_permissions" + transports.SecurityCenterRestInterceptor, "post_update_external_system" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions" + transports.SecurityCenterRestInterceptor, "pre_update_external_system" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() + pb_message = securitycenter_service.UpdateExternalSystemRequest.pb( + securitycenter_service.UpdateExternalSystemRequest() + ) transcode.return_value = { "method": "post", "uri": "my_uri", @@ -19014,19 +24783,19 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - iam_policy_pb2.TestIamPermissionsResponse() + req.return_value._content = gcs_external_system.ExternalSystem.to_json( + gcs_external_system.ExternalSystem() ) - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() + post.return_value = gcs_external_system.ExternalSystem() - client.test_iam_permissions( + client.update_external_system( request, metadata=[ ("key", "val"), @@ -19038,8 +24807,9 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): post.assert_called_once() -def test_test_iam_permissions_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.TestIamPermissionsRequest +def test_update_external_system_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.UpdateExternalSystemRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -19047,7 +24817,18 @@ def test_test_iam_permissions_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } + request_init["external_system"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", + "assignees": ["assignees_value1", "assignees_value2"], + "external_uid": "external_uid_value", + "status": "status_value", + "external_system_update_time": {"seconds": 751, "nanos": 543}, + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -19059,10 +24840,10 @@ def test_test_iam_permissions_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.test_iam_permissions(request) + client.update_external_system(request) -def test_test_iam_permissions_rest_flattened(): +def test_update_external_system_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -19071,40 +24852,44 @@ def test_test_iam_permissions_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() + return_value = gcs_external_system.ExternalSystem() # get arguments that satisfy an http rule for this method - sample_request = {"resource": "organizations/sample1/sources/sample2"} + sample_request = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } # get truthy value for each flattened field mock_args = dict( - resource="resource_value", - permissions=["permissions_value"], + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.test_iam_permissions(**mock_args) + client.update_external_system(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" + "%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" % client.transport._host, args[1], ) -def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): +def test_update_external_system_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -19113,14 +24898,14 @@ def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_test_iam_permissions_rest_error(): +def test_update_external_system_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -19129,11 +24914,11 @@ def test_test_iam_permissions_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateExternalSystemRequest, + securitycenter_service.UpdateFindingRequest, dict, ], ) -def test_update_external_system_rest(request_type): +def test_update_finding_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -19141,49 +24926,249 @@ def test_update_external_system_rest(request_type): # send a request that will satisfy transcoding request_init = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } + "finding": {"name": "organizations/sample1/sources/sample2/findings/sample3"} } - request_init["external_system"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", - "assignees": ["assignees_value1", "assignees_value2"], - "external_uid": "external_uid_value", - "status": "status_value", - "external_system_update_time": {"seconds": 751, "nanos": 543}, + request_init["finding"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { + "base_score": 0.1046, + "attack_vector": 1, + "attack_complexity": 1, + "privileges_required": 1, + "user_interaction": 1, + "scope": 1, + "confidentiality_impact": 1, + "integrity_impact": 1, + "availability_impact": 1, + }, + "upstream_fix_available": True, + } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem( + return_value = gcs_finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + pb_return_value = gcs_finding.Finding.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_external_system(request) + response = client.update_finding(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_external_system_rest_required_fields( - request_type=securitycenter_service.UpdateExternalSystemRequest, +def test_update_finding_rest_required_fields( + request_type=securitycenter_service.UpdateFindingRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -19202,14 +25187,14 @@ def test_update_external_system_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_external_system._get_unset_required_fields(jsonified_request) + ).update_finding._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_external_system._get_unset_required_fields(jsonified_request) + ).update_finding._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -19223,7 +25208,7 @@ def test_update_external_system_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() + return_value = gcs_finding.Finding() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -19244,200 +25229,89 @@ def test_update_external_system_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + pb_return_value = gcs_finding.Finding.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.update_external_system(request) - - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_update_external_system_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.update_external_system._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("externalSystem",))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_external_system_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_external_system" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_external_system" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateExternalSystemRequest.pb( - securitycenter_service.UpdateExternalSystemRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_external_system.ExternalSystem.to_json( - gcs_external_system.ExternalSystem() - ) - - request = securitycenter_service.UpdateExternalSystemRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_external_system.ExternalSystem() - - client.update_external_system( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_external_system_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.UpdateExternalSystemRequest, -): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } - } - request_init["external_system"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", - "assignees": ["assignees_value1", "assignees_value2"], - "external_uid": "external_uid_value", - "status": "status_value", - "external_system_update_time": {"seconds": 751, "nanos": 543}, - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_external_system(request) - - -def test_update_external_system_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() + req.return_value = response_value - # get arguments that satisfy an http rule for this method - sample_request = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } - } + response = client.update_finding(request) - # get truthy value for each flattened field - mock_args = dict( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), - ) - mock_args.update(sample_request) + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - client.update_external_system(**mock_args) +def test_update_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" - % client.transport._host, - args[1], - ) + unset_fields = transport.update_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("finding",))) -def test_update_external_system_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_update_finding" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_update_finding" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateFindingRequest.pb( + securitycenter_service.UpdateFindingRequest() ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + request = securitycenter_service.UpdateFindingRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() -def test_update_external_system_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + client.update_finding( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + pre.assert_called_once() + post.assert_called_once() -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.UpdateFindingRequest, - dict, - ], -) -def test_update_finding_rest(request_type): + +def test_update_finding_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.UpdateFindingRequest +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # send a request that will satisfy transcoding @@ -19575,6 +25449,7 @@ def test_update_finding_rest(request_type): }, "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], "next_steps": "next_steps_value", + "module_name": "module_name_value", "containers": [ { "name": "name_value", @@ -19632,56 +25507,144 @@ def test_update_finding_rest(request_type): } request = request_type(**request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_finding(request) + + +def test_update_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = { + "finding": { + "name": "organizations/sample1/sources/sample2/findings/sample3" + } + } + + # get truthy value for each flattened field + mock_args = dict( + finding=gcs_finding.Finding(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.update_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{finding.name=organizations/*/sources/*/findings/*}" + % client.transport._host, + args[1], + ) + + +def test_update_finding_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), + ) + + +def test_update_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateMuteConfigRequest, + dict, + ], +) +def test_update_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + } + request_init["mute_config"] = { + "name": "organizations/sample1/muteConfigs/sample2", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( + return_value = gcs_mute_config.MuteConfig( name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", + display_name="display_name_value", description="description_value", - next_steps="next_steps_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_finding(request) + response = client.update_mute_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == "name_value" + assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" -def test_update_finding_rest_required_fields( - request_type=securitycenter_service.UpdateFindingRequest, +def test_update_mute_config_rest_required_fields( + request_type=securitycenter_service.UpdateMuteConfigRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -19700,14 +25663,14 @@ def test_update_finding_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_finding._get_unset_required_fields(jsonified_request) + ).update_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_finding._get_unset_required_fields(jsonified_request) + ).update_mute_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -19721,7 +25684,7 @@ def test_update_finding_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = gcs_mute_config.MuteConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -19742,30 +25705,30 @@ def test_update_finding_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_finding(request) + response = client.update_mute_config(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_finding_rest_unset_required_fields(): +def test_update_mute_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("finding",))) + unset_fields = transport.update_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("muteConfig",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): +def test_update_mute_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -19778,14 +25741,14 @@ def test_update_finding_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_finding" + transports.SecurityCenterRestInterceptor, "post_update_mute_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_finding" + transports.SecurityCenterRestInterceptor, "pre_update_mute_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb( - securitycenter_service.UpdateFindingRequest() + pb_message = securitycenter_service.UpdateMuteConfigRequest.pb( + securitycenter_service.UpdateMuteConfigRequest() ) transcode.return_value = { "method": "post", @@ -19797,225 +25760,50 @@ def test_update_finding_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.UpdateFindingRequest -): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "finding": {"name": "organizations/sample1/sources/sample2/findings/sample3"} - } - request_init["finding"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { - "base_score": 0.1046, - "attack_vector": 1, - "attack_complexity": 1, - "privileges_required": 1, - "user_interaction": 1, - "scope": 1, - "confidentiality_impact": 1, - "integrity_impact": 1, - "availability_impact": 1, - }, - "upstream_fix_available": True, - } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } - ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, - } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], - } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } - ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], - } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } - ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, + req.return_value._content = gcs_mute_config.MuteConfig.to_json( + gcs_mute_config.MuteConfig() + ) + + request = securitycenter_service.UpdateMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.update_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.UpdateMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + } + request_init["mute_config"] = { + "name": "organizations/sample1/muteConfigs/sample2", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", } request = request_type(**request_init) @@ -20028,10 +25816,10 @@ def test_update_finding_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_finding(request) + client.update_mute_config(request) -def test_update_finding_rest_flattened(): +def test_update_mute_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20040,43 +25828,42 @@ def test_update_finding_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = gcs_mute_config.MuteConfig() # get arguments that satisfy an http rule for this method sample_request = { - "finding": { - "name": "organizations/sample1/sources/sample2/findings/sample3" - } + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} } # get truthy value for each flattened field mock_args = dict( - finding=gcs_finding.Finding(name="name_value"), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_finding(**mock_args) + client.update_mute_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{finding.name=organizations/*/sources/*/findings/*}" + "%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" % client.transport._host, args[1], ) -def test_update_finding_rest_flattened_error(transport: str = "rest"): +def test_update_mute_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20085,13 +25872,14 @@ def test_update_finding_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_finding_rest_error(): +def test_update_mute_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20100,11 +25888,11 @@ def test_update_finding_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateMuteConfigRequest, + securitycenter_service.UpdateNotificationConfigRequest, dict, ], ) -def test_update_mute_config_rest(request_type): +def test_update_notification_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20112,51 +25900,52 @@ def test_update_mute_config_rest(request_type): # send a request that will satisfy transcoding request_init = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } - request_init["mute_config"] = { - "name": "organizations/sample1/muteConfigs/sample2", - "display_name": "display_name_value", + request_init["notification_config"] = { + "name": "organizations/sample1/notificationConfigs/sample2", "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( + return_value = gcs_notification_config.NotificationConfig( name="name_value", - display_name="display_name_value", description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_mute_config(request) + response = client.update_notification_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" - assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" -def test_update_mute_config_rest_required_fields( - request_type=securitycenter_service.UpdateMuteConfigRequest, +def test_update_notification_config_rest_required_fields( + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20175,14 +25964,14 @@ def test_update_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_mute_config._get_unset_required_fields(jsonified_request) + ).update_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_mute_config._get_unset_required_fields(jsonified_request) + ).update_notification_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20196,7 +25985,7 @@ def test_update_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = gcs_notification_config.NotificationConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20217,30 +26006,32 @@ def test_update_mute_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_mute_config(request) + response = client.update_notification_config(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_mute_config_rest_unset_required_fields(): +def test_update_notification_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("muteConfig",))) + unset_fields = transport.update_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("notificationConfig",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_mute_config_rest_interceptors(null_interceptor): +def test_update_notification_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20253,14 +26044,14 @@ def test_update_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_mute_config" + transports.SecurityCenterRestInterceptor, "post_update_notification_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_mute_config" + transports.SecurityCenterRestInterceptor, "pre_update_notification_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateMuteConfigRequest.pb( - securitycenter_service.UpdateMuteConfigRequest() + pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb( + securitycenter_service.UpdateNotificationConfigRequest() ) transcode.return_value = { "method": "post", @@ -20272,19 +26063,19 @@ def test_update_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json( - gcs_mute_config.MuteConfig() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json( + gcs_notification_config.NotificationConfig() ) - request = securitycenter_service.UpdateMuteConfigRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() + post.return_value = gcs_notification_config.NotificationConfig() - client.update_mute_config( + client.update_notification_config( request, metadata=[ ("key", "val"), @@ -20296,8 +26087,9 @@ def test_update_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.UpdateMuteConfigRequest +def test_update_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20306,16 +26098,16 @@ def test_update_mute_config_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } - request_init["mute_config"] = { - "name": "organizations/sample1/muteConfigs/sample2", - "display_name": "display_name_value", + request_init["notification_config"] = { + "name": "organizations/sample1/notificationConfigs/sample2", "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, } request = request_type(**request_init) @@ -20328,10 +26120,10 @@ def test_update_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_mute_config(request) + client.update_notification_config(request) -def test_update_mute_config_rest_flattened(): +def test_update_notification_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20340,16 +26132,20 @@ def test_update_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = gcs_notification_config.NotificationConfig() # get arguments that satisfy an http rule for this method sample_request = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } # get truthy value for each flattened field mock_args = dict( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) @@ -20357,25 +26153,25 @@ def test_update_mute_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_mute_config(**mock_args) + client.update_notification_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" + "%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1], ) -def test_update_mute_config_rest_flattened_error(transport: str = "rest"): +def test_update_notification_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20384,14 +26180,16 @@ def test_update_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_mute_config_rest_error(): +def test_update_notification_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20400,11 +26198,11 @@ def test_update_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, + securitycenter_service.UpdateOrganizationSettingsRequest, dict, ], ) -def test_update_notification_config_rest(request_type): +def test_update_organization_settings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20412,52 +26210,47 @@ def test_update_notification_config_rest(request_type): # send a request that will satisfy transcoding request_init = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" - } + "organization_settings": {"name": "organizations/sample1/organizationSettings"} } - request_init["notification_config"] = { - "name": "organizations/sample1/notificationConfigs/sample2", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, + request_init["organization_settings"] = { + "name": "organizations/sample1/organizationSettings", + "enable_asset_discovery": True, + "asset_discovery_config": { + "project_ids": ["project_ids_value1", "project_ids_value2"], + "inclusion_mode": 1, + "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + }, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( + return_value = gcs_organization_settings.OrganizationSettings( name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + enable_asset_discovery=True, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_notification_config(request) + response = client.update_organization_settings(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) + assert isinstance(response, gcs_organization_settings.OrganizationSettings) assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert response.enable_asset_discovery is True -def test_update_notification_config_rest_required_fields( - request_type=securitycenter_service.UpdateNotificationConfigRequest, +def test_update_organization_settings_rest_required_fields( + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20476,14 +26269,14 @@ def test_update_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_notification_config._get_unset_required_fields(jsonified_request) + ).update_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_notification_config._get_unset_required_fields(jsonified_request) + ).update_organization_settings._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20497,7 +26290,7 @@ def test_update_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = gcs_organization_settings.OrganizationSettings() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20518,7 +26311,7 @@ def test_update_notification_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb( + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -20526,24 +26319,24 @@ def test_update_notification_config_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_notification_config(request) + response = client.update_organization_settings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_notification_config_rest_unset_required_fields(): +def test_update_organization_settings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("notificationConfig",))) + unset_fields = transport.update_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("organizationSettings",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): +def test_update_organization_settings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20556,14 +26349,14 @@ def test_update_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_notification_config" + transports.SecurityCenterRestInterceptor, "post_update_organization_settings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_notification_config" + transports.SecurityCenterRestInterceptor, "pre_update_organization_settings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb( - securitycenter_service.UpdateNotificationConfigRequest() + pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb( + securitycenter_service.UpdateOrganizationSettingsRequest() ) transcode.return_value = { "method": "post", @@ -20575,19 +26368,21 @@ def test_update_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json( - gcs_notification_config.NotificationConfig() + req.return_value._content = ( + gcs_organization_settings.OrganizationSettings.to_json( + gcs_organization_settings.OrganizationSettings() + ) ) - request = securitycenter_service.UpdateNotificationConfigRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() + post.return_value = gcs_organization_settings.OrganizationSettings() - client.update_notification_config( + client.update_organization_settings( request, metadata=[ ("key", "val"), @@ -20599,9 +26394,9 @@ def test_update_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_notification_config_rest_bad_request( +def test_update_organization_settings_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.UpdateNotificationConfigRequest, + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20610,16 +26405,16 @@ def test_update_notification_config_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" - } + "organization_settings": {"name": "organizations/sample1/organizationSettings"} } - request_init["notification_config"] = { - "name": "organizations/sample1/notificationConfigs/sample2", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, + request_init["organization_settings"] = { + "name": "organizations/sample1/organizationSettings", + "enable_asset_discovery": True, + "asset_discovery_config": { + "project_ids": ["project_ids_value1", "project_ids_value2"], + "inclusion_mode": 1, + "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + }, } request = request_type(**request_init) @@ -20632,10 +26427,10 @@ def test_update_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_notification_config(request) + client.update_organization_settings(request) -def test_update_notification_config_rest_flattened(): +def test_update_organization_settings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20644,46 +26439,47 @@ def test_update_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = gcs_organization_settings.OrganizationSettings() # get arguments that satisfy an http rule for this method sample_request = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" + "organization_settings": { + "name": "organizations/sample1/organizationSettings" } } # get truthy value for each flattened field mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig( + organization_settings=gcs_organization_settings.OrganizationSettings( name="name_value" ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_notification_config(**mock_args) + client.update_organization_settings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" + "%s/v1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1], ) -def test_update_notification_config_rest_flattened_error(transport: str = "rest"): +def test_update_organization_settings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20692,16 +26488,15 @@ def test_update_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( name="name_value" ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_notification_config_rest_error(): +def test_update_organization_settings_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20710,11 +26505,11 @@ def test_update_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_update_organization_settings_rest(request_type): +def test_update_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20722,15 +26517,33 @@ def test_update_organization_settings_rest(request_type): # send a request that will satisfy transcoding request_init = { - "organization_settings": {"name": "organizations/sample1/organizationSettings"} + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } } - request_init["organization_settings"] = { - "name": "organizations/sample1/organizationSettings", - "enable_asset_discovery": True, - "asset_discovery_config": { - "project_ids": ["project_ids_value1", "project_ids_value2"], - "inclusion_mode": 1, - "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + request_init["security_health_analytics_custom_module"] = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", }, } request = request_type(**request_init) @@ -20738,31 +26551,43 @@ def test_update_organization_settings_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - enable_asset_discovery=True, + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_organization_settings(request) + response = client.update_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_update_organization_settings_rest_required_fields( - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, +def test_update_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20781,14 +26606,18 @@ def test_update_organization_settings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_organization_settings._get_unset_required_fields(jsonified_request) + ).update_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_organization_settings._get_unset_required_fields(jsonified_request) + ).update_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20802,7 +26631,9 @@ def test_update_organization_settings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20823,7 +26654,7 @@ def test_update_organization_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -20831,24 +26662,30 @@ def test_update_organization_settings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_organization_settings(request) + response = client.update_security_health_analytics_custom_module(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_organization_settings_rest_unset_required_fields(): +def test_update_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("organizationSettings",))) + unset_fields = transport.update_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set(("updateMask",)) & set(("securityHealthAnalyticsCustomModule",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): +def test_update_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20861,14 +26698,16 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_organization_settings" + transports.SecurityCenterRestInterceptor, + "post_update_security_health_analytics_custom_module", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_organization_settings" + transports.SecurityCenterRestInterceptor, + "pre_update_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb( - securitycenter_service.UpdateOrganizationSettingsRequest() + pb_message = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() ) transcode.return_value = { "method": "post", @@ -20880,21 +26719,23 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - gcs_organization_settings.OrganizationSettings.to_json( - gcs_organization_settings.OrganizationSettings() - ) + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() + post.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) - client.update_organization_settings( + client.update_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -20906,9 +26747,9 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_organization_settings_rest_bad_request( +def test_update_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20917,15 +26758,33 @@ def test_update_organization_settings_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "organization_settings": {"name": "organizations/sample1/organizationSettings"} + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } } - request_init["organization_settings"] = { - "name": "organizations/sample1/organizationSettings", - "enable_asset_discovery": True, - "asset_discovery_config": { - "project_ids": ["project_ids_value1", "project_ids_value2"], - "inclusion_mode": 1, - "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + request_init["security_health_analytics_custom_module"] = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", }, } request = request_type(**request_init) @@ -20939,10 +26798,10 @@ def test_update_organization_settings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_organization_settings(request) + client.update_security_health_analytics_custom_module(request) -def test_update_organization_settings_rest_flattened(): +def test_update_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20951,47 +26810,52 @@ def test_update_organization_settings_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method sample_request = { - "organization_settings": { - "name": "organizations/sample1/organizationSettings" + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" } } # get truthy value for each flattened field mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value" ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_organization_settings(**mock_args) + client.update_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{organization_settings.name=organizations/*/organizationSettings}" + "%s/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1], ) -def test_update_organization_settings_rest_flattened_error(transport: str = "rest"): +def test_update_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -21000,15 +26864,16 @@ def test_update_organization_settings_rest_flattened_error(transport: str = "res # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value" ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_organization_settings_rest_error(): +def test_update_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -22971,24 +28836,31 @@ def test_security_center_base_transport(): # raise NotImplementedError. methods = ( "bulk_mute_findings", + "create_security_health_analytics_custom_module", "create_source", "create_finding", "create_mute_config", "create_notification_config", "delete_mute_config", "delete_notification_config", + "delete_security_health_analytics_custom_module", "get_big_query_export", "get_iam_policy", "get_mute_config", "get_notification_config", "get_organization_settings", + "get_effective_security_health_analytics_custom_module", + "get_security_health_analytics_custom_module", "get_source", "group_assets", "group_findings", "list_assets", + "list_descendant_security_health_analytics_custom_modules", "list_findings", "list_mute_configs", "list_notification_configs", + "list_effective_security_health_analytics_custom_modules", + "list_security_health_analytics_custom_modules", "list_sources", "run_asset_discovery", "set_finding_state", @@ -23000,6 +28872,7 @@ def test_security_center_base_transport(): "update_mute_config", "update_notification_config", "update_organization_settings", + "update_security_health_analytics_custom_module", "update_source", "update_security_marks", "create_big_query_export", @@ -23293,6 +29166,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.bulk_mute_findings._session session2 = client2.transport.bulk_mute_findings._session assert session1 != session2 + session1 = client1.transport.create_security_health_analytics_custom_module._session + session2 = client2.transport.create_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.create_source._session session2 = client2.transport.create_source._session assert session1 != session2 @@ -23311,6 +29187,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.delete_notification_config._session session2 = client2.transport.delete_notification_config._session assert session1 != session2 + session1 = client1.transport.delete_security_health_analytics_custom_module._session + session2 = client2.transport.delete_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.get_big_query_export._session session2 = client2.transport.get_big_query_export._session assert session1 != session2 @@ -23326,6 +29205,16 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.get_organization_settings._session session2 = client2.transport.get_organization_settings._session assert session1 != session2 + session1 = ( + client1.transport.get_effective_security_health_analytics_custom_module._session + ) + session2 = ( + client2.transport.get_effective_security_health_analytics_custom_module._session + ) + assert session1 != session2 + session1 = client1.transport.get_security_health_analytics_custom_module._session + session2 = client2.transport.get_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.get_source._session session2 = client2.transport.get_source._session assert session1 != session2 @@ -23338,6 +29227,13 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.list_assets._session session2 = client2.transport.list_assets._session assert session1 != session2 + session1 = ( + client1.transport.list_descendant_security_health_analytics_custom_modules._session + ) + session2 = ( + client2.transport.list_descendant_security_health_analytics_custom_modules._session + ) + assert session1 != session2 session1 = client1.transport.list_findings._session session2 = client2.transport.list_findings._session assert session1 != session2 @@ -23347,6 +29243,16 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.list_notification_configs._session session2 = client2.transport.list_notification_configs._session assert session1 != session2 + session1 = ( + client1.transport.list_effective_security_health_analytics_custom_modules._session + ) + session2 = ( + client2.transport.list_effective_security_health_analytics_custom_modules._session + ) + assert session1 != session2 + session1 = client1.transport.list_security_health_analytics_custom_modules._session + session2 = client2.transport.list_security_health_analytics_custom_modules._session + assert session1 != session2 session1 = client1.transport.list_sources._session session2 = client2.transport.list_sources._session assert session1 != session2 @@ -23380,6 +29286,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.update_organization_settings._session session2 = client2.transport.update_organization_settings._session assert session1 != session2 + session1 = client1.transport.update_security_health_analytics_custom_module._session + session2 = client2.transport.update_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.update_source._session session2 = client2.transport.update_source._session assert session1 != session2 @@ -23606,11 +29515,42 @@ def test_parse_big_query_export_path(): assert expected == actual -def test_external_system_path(): +def test_effective_security_health_analytics_custom_module_path(): organization = "winkle" - source = "nautilus" - finding = "scallop" - externalsystem = "abalone" + effective_custom_module = "nautilus" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format( + organization=organization, + effective_custom_module=effective_custom_module, + ) + actual = ( + SecurityCenterClient.effective_security_health_analytics_custom_module_path( + organization, effective_custom_module + ) + ) + assert expected == actual + + +def test_parse_effective_security_health_analytics_custom_module_path(): + expected = { + "organization": "scallop", + "effective_custom_module": "abalone", + } + path = SecurityCenterClient.effective_security_health_analytics_custom_module_path( + **expected + ) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path( + path + ) + assert expected == actual + + +def test_external_system_path(): + organization = "squid" + source = "clam" + finding = "whelk" + externalsystem = "octopus" expected = "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format( organization=organization, source=source, @@ -23625,10 +29565,10 @@ def test_external_system_path(): def test_parse_external_system_path(): expected = { - "organization": "squid", - "source": "clam", - "finding": "whelk", - "externalsystem": "octopus", + "organization": "oyster", + "source": "nudibranch", + "finding": "cuttlefish", + "externalsystem": "mussel", } path = SecurityCenterClient.external_system_path(**expected) @@ -23638,9 +29578,9 @@ def test_parse_external_system_path(): def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" + organization = "winkle" + source = "nautilus" + finding = "scallop" expected = ( "organizations/{organization}/sources/{source}/findings/{finding}".format( organization=organization, @@ -23654,9 +29594,9 @@ def test_finding_path(): def test_parse_finding_path(): expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", + "organization": "abalone", + "source": "squid", + "finding": "clam", } path = SecurityCenterClient.finding_path(**expected) @@ -23666,8 +29606,8 @@ def test_parse_finding_path(): def test_mute_config_path(): - organization = "scallop" - mute_config = "abalone" + organization = "whelk" + mute_config = "octopus" expected = "organizations/{organization}/muteConfigs/{mute_config}".format( organization=organization, mute_config=mute_config, @@ -23678,8 +29618,8 @@ def test_mute_config_path(): def test_parse_mute_config_path(): expected = { - "organization": "squid", - "mute_config": "clam", + "organization": "oyster", + "mute_config": "nudibranch", } path = SecurityCenterClient.mute_config_path(**expected) @@ -23689,8 +29629,8 @@ def test_parse_mute_config_path(): def test_notification_config_path(): - organization = "whelk" - notification_config = "octopus" + organization = "cuttlefish" + notification_config = "mussel" expected = ( "organizations/{organization}/notificationConfigs/{notification_config}".format( organization=organization, @@ -23705,8 +29645,8 @@ def test_notification_config_path(): def test_parse_notification_config_path(): expected = { - "organization": "oyster", - "notification_config": "nudibranch", + "organization": "winkle", + "notification_config": "nautilus", } path = SecurityCenterClient.notification_config_path(**expected) @@ -23716,7 +29656,7 @@ def test_parse_notification_config_path(): def test_organization_settings_path(): - organization = "cuttlefish" + organization = "scallop" expected = "organizations/{organization}/organizationSettings".format( organization=organization, ) @@ -23726,7 +29666,7 @@ def test_organization_settings_path(): def test_parse_organization_settings_path(): expected = { - "organization": "mussel", + "organization": "abalone", } path = SecurityCenterClient.organization_settings_path(**expected) @@ -23735,9 +29675,36 @@ def test_parse_organization_settings_path(): assert expected == actual +def test_security_health_analytics_custom_module_path(): + organization = "squid" + custom_module = "clam" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format( + organization=organization, + custom_module=custom_module, + ) + actual = SecurityCenterClient.security_health_analytics_custom_module_path( + organization, custom_module + ) + assert expected == actual + + +def test_parse_security_health_analytics_custom_module_path(): + expected = { + "organization": "whelk", + "custom_module": "octopus", + } + path = SecurityCenterClient.security_health_analytics_custom_module_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_health_analytics_custom_module_path( + path + ) + assert expected == actual + + def test_security_marks_path(): - organization = "winkle" - asset = "nautilus" + organization = "oyster" + asset = "nudibranch" expected = "organizations/{organization}/assets/{asset}/securityMarks".format( organization=organization, asset=asset, @@ -23748,8 +29715,8 @@ def test_security_marks_path(): def test_parse_security_marks_path(): expected = { - "organization": "scallop", - "asset": "abalone", + "organization": "cuttlefish", + "asset": "mussel", } path = SecurityCenterClient.security_marks_path(**expected) @@ -23759,8 +29726,8 @@ def test_parse_security_marks_path(): def test_source_path(): - organization = "squid" - source = "clam" + organization = "winkle" + source = "nautilus" expected = "organizations/{organization}/sources/{source}".format( organization=organization, source=source, @@ -23771,8 +29738,8 @@ def test_source_path(): def test_parse_source_path(): expected = { - "organization": "whelk", - "source": "octopus", + "organization": "scallop", + "source": "abalone", } path = SecurityCenterClient.source_path(**expected) @@ -23782,8 +29749,8 @@ def test_parse_source_path(): def test_topic_path(): - project = "oyster" - topic = "nudibranch" + project = "squid" + topic = "clam" expected = "projects/{project}/topics/{topic}".format( project=project, topic=topic, @@ -23794,8 +29761,8 @@ def test_topic_path(): def test_parse_topic_path(): expected = { - "project": "cuttlefish", - "topic": "mussel", + "project": "whelk", + "topic": "octopus", } path = SecurityCenterClient.topic_path(**expected) @@ -23805,7 +29772,7 @@ def test_parse_topic_path(): def test_common_billing_account_path(): - billing_account = "winkle" + billing_account = "oyster" expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -23815,7 +29782,7 @@ def test_common_billing_account_path(): def test_parse_common_billing_account_path(): expected = { - "billing_account": "nautilus", + "billing_account": "nudibranch", } path = SecurityCenterClient.common_billing_account_path(**expected) @@ -23825,7 +29792,7 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): - folder = "scallop" + folder = "cuttlefish" expected = "folders/{folder}".format( folder=folder, ) @@ -23835,7 +29802,7 @@ def test_common_folder_path(): def test_parse_common_folder_path(): expected = { - "folder": "abalone", + "folder": "mussel", } path = SecurityCenterClient.common_folder_path(**expected) @@ -23845,7 +29812,7 @@ def test_parse_common_folder_path(): def test_common_organization_path(): - organization = "squid" + organization = "winkle" expected = "organizations/{organization}".format( organization=organization, ) @@ -23855,7 +29822,7 @@ def test_common_organization_path(): def test_parse_common_organization_path(): expected = { - "organization": "clam", + "organization": "nautilus", } path = SecurityCenterClient.common_organization_path(**expected) @@ -23865,7 +29832,7 @@ def test_parse_common_organization_path(): def test_common_project_path(): - project = "whelk" + project = "scallop" expected = "projects/{project}".format( project=project, ) @@ -23875,7 +29842,7 @@ def test_common_project_path(): def test_parse_common_project_path(): expected = { - "project": "octopus", + "project": "abalone", } path = SecurityCenterClient.common_project_path(**expected) @@ -23885,8 +29852,8 @@ def test_parse_common_project_path(): def test_common_location_path(): - project = "oyster" - location = "nudibranch" + project = "squid" + location = "clam" expected = "projects/{project}/locations/{location}".format( project=project, location=location, @@ -23897,8 +29864,8 @@ def test_common_location_path(): def test_parse_common_location_path(): expected = { - "project": "cuttlefish", - "location": "mussel", + "project": "whelk", + "location": "octopus", } path = SecurityCenterClient.common_location_path(**expected) From c17581db0fba14cf26b070a75900d7dff5ca1647 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Tue, 11 Apr 2023 20:52:16 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- google/cloud/securitycenter/__init__.py | 34 + google/cloud/securitycenter_v1/__init__.py | 32 + .../securitycenter_v1/gapic_metadata.json | 120 + .../services/security_center/async_client.py | 1361 +- .../services/security_center/client.py | 1351 +- .../services/security_center/pagers.py | 473 + .../security_center/transports/base.py | 210 +- .../security_center/transports/grpc.py | 297 +- .../transports/grpc_asyncio.py | 311 +- .../security_center/transports/rest.py | 1500 +- .../cloud/securitycenter_v1/types/__init__.py | 30 + .../types/bigquery_export.py | 14 +- .../types/contact_details.py | 4 +- .../cloud/securitycenter_v1/types/database.py | 2 +- ...security_health_analytics_custom_module.py | 6 +- .../securitycenter_v1/types/exfiltration.py | 2 +- .../cloud/securitycenter_v1/types/finding.py | 10 +- .../securitycenter_v1/types/indicator.py | 15 +- .../securitycenter_v1/types/kernel_rootkit.py | 27 +- .../securitycenter_v1/types/kubernetes.py | 7 +- ...security_health_analytics_custom_config.py | 15 +- ...security_health_analytics_custom_module.py | 8 +- .../types/securitycenter_service.py | 328 +- owl-bot-staging/v1/.coveragerc | 13 - owl-bot-staging/v1/.flake8 | 33 - owl-bot-staging/v1/MANIFEST.in | 2 - owl-bot-staging/v1/README.rst | 49 - owl-bot-staging/v1/docs/conf.py | 376 - owl-bot-staging/v1/docs/index.rst | 7 - .../securitycenter_v1/security_center.rst | 10 - .../v1/docs/securitycenter_v1/services.rst | 6 - .../v1/docs/securitycenter_v1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 215 - .../cloud/securitycenter/gapic_version.py | 16 - .../v1/google/cloud/securitycenter/py.typed | 2 - .../cloud/securitycenter_v1/__init__.py | 216 - .../securitycenter_v1/gapic_metadata.json | 688 - .../cloud/securitycenter_v1/gapic_version.py | 16 - .../google/cloud/securitycenter_v1/py.typed | 2 - .../securitycenter_v1/services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 5701 ---- .../services/security_center/client.py | 5894 ---- .../services/security_center/pagers.py | 1355 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 925 - .../security_center/transports/grpc.py | 1555 - .../transports/grpc_asyncio.py | 1554 - .../security_center/transports/rest.py | 6237 ---- .../cloud/securitycenter_v1/types/__init__.py | 272 - .../cloud/securitycenter_v1/types/access.py | 190 - .../cloud/securitycenter_v1/types/asset.py | 227 - .../types/bigquery_export.py | 135 - .../securitycenter_v1/types/compliance.py | 60 - .../securitycenter_v1/types/connection.py | 97 - .../types/contact_details.py | 61 - .../securitycenter_v1/types/container.py | 72 - .../cloud/securitycenter_v1/types/database.py | 83 - .../securitycenter_v1/types/exfiltration.py | 89 - .../types/external_system.py | 81 - .../cloud/securitycenter_v1/types/file.py | 84 - .../cloud/securitycenter_v1/types/finding.py | 542 - .../cloud/securitycenter_v1/types/folder.py | 54 - .../securitycenter_v1/types/iam_binding.py | 76 - .../securitycenter_v1/types/indicator.py | 164 - .../securitycenter_v1/types/kernel_rootkit.py | 108 - .../securitycenter_v1/types/kubernetes.py | 338 - .../cloud/securitycenter_v1/types/label.py | 53 - .../securitycenter_v1/types/mitre_attack.py | 252 - .../securitycenter_v1/types/mute_config.py | 120 - .../types/notification_config.py | 127 - .../types/notification_message.py | 70 - .../types/organization_settings.py | 123 - .../cloud/securitycenter_v1/types/process.py | 135 - .../cloud/securitycenter_v1/types/resource.py | 96 - .../types/run_asset_discovery_response.py | 76 - .../securitycenter_v1/types/security_marks.py | 80 - .../types/securitycenter_service.py | 2456 -- .../cloud/securitycenter_v1/types/source.py | 87 - .../securitycenter_v1/types/vulnerability.py | 353 - owl-bot-staging/v1/mypy.ini | 3 - owl-bot-staging/v1/noxfile.py | 184 - ...ecurity_center_bulk_mute_findings_async.py | 56 - ...security_center_bulk_mute_findings_sync.py | 56 - ...ty_center_create_big_query_export_async.py | 53 - ...ity_center_create_big_query_export_sync.py | 53 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...ecurity_center_create_mute_config_async.py | 57 - ...security_center_create_mute_config_sync.py | 57 - ...center_create_notification_config_async.py | 53 - ..._center_create_notification_config_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...ty_center_delete_big_query_export_async.py | 50 - ...ity_center_delete_big_query_export_sync.py | 50 - ...ecurity_center_delete_mute_config_async.py | 50 - ...security_center_delete_mute_config_sync.py | 50 - ...center_delete_notification_config_async.py | 50 - ..._center_delete_notification_config_sync.py | 50 - ...urity_center_get_big_query_export_async.py | 52 - ...curity_center_get_big_query_export_sync.py | 52 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ...d_security_center_get_mute_config_async.py | 52 - ...ed_security_center_get_mute_config_sync.py | 52 - ...ty_center_get_notification_config_async.py | 52 - ...ity_center_get_notification_config_sync.py | 52 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ity_center_list_big_query_exports_async.py | 53 - ...rity_center_list_big_query_exports_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ...security_center_list_mute_configs_async.py | 53 - ..._security_center_list_mute_configs_sync.py | 53 - ..._center_list_notification_configs_async.py | 53 - ...y_center_list_notification_configs_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...enerated_security_center_set_mute_async.py | 53 - ...generated_security_center_set_mute_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ty_center_update_big_query_export_async.py | 51 - ...ity_center_update_big_query_export_sync.py | 51 - ...ity_center_update_external_system_async.py | 51 - ...rity_center_update_external_system_sync.py | 51 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...ecurity_center_update_mute_config_async.py | 55 - ...security_center_update_mute_config_sync.py | 55 - ...center_update_notification_config_async.py | 51 - ..._center_update_notification_config_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...tadata_google.cloud.securitycenter.v1.json | 7211 ----- .../fixup_securitycenter_v1_keywords.py | 219 - owl-bot-staging/v1/setup.py | 91 - .../v1/testing/constraints-3.10.txt | 7 - .../v1/testing/constraints-3.11.txt | 7 - .../v1/testing/constraints-3.12.txt | 7 - .../v1/testing/constraints-3.7.txt | 10 - .../v1/testing/constraints-3.8.txt | 7 - .../v1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1/tests/__init__.py | 16 - owl-bot-staging/v1/tests/unit/__init__.py | 16 - .../v1/tests/unit/gapic/__init__.py | 16 - .../unit/gapic/securitycenter_v1/__init__.py | 16 - .../securitycenter_v1/test_security_center.py | 26225 ---------------- owl-bot-staging/v1beta1/.coveragerc | 13 - owl-bot-staging/v1beta1/.flake8 | 33 - owl-bot-staging/v1beta1/MANIFEST.in | 2 - owl-bot-staging/v1beta1/README.rst | 49 - owl-bot-staging/v1beta1/docs/conf.py | 376 - owl-bot-staging/v1beta1/docs/index.rst | 7 - .../security_center.rst | 10 - .../docs/securitycenter_v1beta1/services.rst | 6 - .../docs/securitycenter_v1beta1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 81 - .../cloud/securitycenter/gapic_version.py | 16 - .../google/cloud/securitycenter/py.typed | 2 - .../cloud/securitycenter_v1beta1/__init__.py | 82 - .../gapic_metadata.json | 298 - .../securitycenter_v1beta1/gapic_version.py | 16 - .../cloud/securitycenter_v1beta1/py.typed | 2 - .../services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 2406 -- .../services/security_center/client.py | 2585 -- .../services/security_center/pagers.py | 625 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 465 - .../security_center/transports/grpc.py | 754 - .../transports/grpc_asyncio.py | 753 - .../security_center/transports/rest.py | 2570 -- .../securitycenter_v1beta1/types/__init__.py | 86 - .../securitycenter_v1beta1/types/asset.py | 155 - .../securitycenter_v1beta1/types/finding.py | 164 - .../types/organization_settings.py | 115 - .../types/run_asset_discovery_response.py | 76 - .../types/security_marks.py | 68 - .../types/securitycenter_service.py | 1053 - .../securitycenter_v1beta1/types/source.py | 76 - owl-bot-staging/v1beta1/mypy.ini | 3 - owl-bot-staging/v1beta1/noxfile.py | 184 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...a_google.cloud.securitycenter.v1beta1.json | 2945 -- .../fixup_securitycenter_v1beta1_keywords.py | 193 - owl-bot-staging/v1beta1/setup.py | 91 - .../v1beta1/testing/constraints-3.10.txt | 7 - .../v1beta1/testing/constraints-3.11.txt | 7 - .../v1beta1/testing/constraints-3.12.txt | 7 - .../v1beta1/testing/constraints-3.7.txt | 10 - .../v1beta1/testing/constraints-3.8.txt | 7 - .../v1beta1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1beta1/tests/__init__.py | 16 - .../v1beta1/tests/unit/__init__.py | 16 - .../v1beta1/tests/unit/gapic/__init__.py | 16 - .../gapic/securitycenter_v1beta1/__init__.py | 16 - .../test_security_center.py | 10951 ------- owl-bot-staging/v1p1beta1/.coveragerc | 13 - owl-bot-staging/v1p1beta1/.flake8 | 33 - owl-bot-staging/v1p1beta1/MANIFEST.in | 2 - owl-bot-staging/v1p1beta1/README.rst | 49 - owl-bot-staging/v1p1beta1/docs/conf.py | 376 - owl-bot-staging/v1p1beta1/docs/index.rst | 7 - .../security_center.rst | 10 - .../securitycenter_v1p1beta1/services.rst | 6 - .../docs/securitycenter_v1p1beta1/types.rst | 6 - .../google/cloud/securitycenter/__init__.py | 101 - .../cloud/securitycenter/gapic_version.py | 16 - .../google/cloud/securitycenter/py.typed | 2 - .../securitycenter_v1p1beta1/__init__.py | 102 - .../gapic_metadata.json | 373 - .../securitycenter_v1p1beta1/gapic_version.py | 16 - .../cloud/securitycenter_v1p1beta1/py.typed | 2 - .../services/__init__.py | 15 - .../services/security_center/__init__.py | 22 - .../services/security_center/async_client.py | 3083 -- .../services/security_center/client.py | 3264 -- .../services/security_center/pagers.py | 746 - .../security_center/transports/__init__.py | 38 - .../security_center/transports/base.py | 552 - .../security_center/transports/grpc.py | 889 - .../transports/grpc_asyncio.py | 888 - .../security_center/transports/rest.py | 3232 -- .../types/__init__.py | 114 - .../securitycenter_v1p1beta1/types/asset.py | 227 - .../securitycenter_v1p1beta1/types/finding.py | 208 - .../securitycenter_v1p1beta1/types/folder.py | 54 - .../types/notification_config.py | 142 - .../types/notification_message.py | 69 - .../types/organization_settings.py | 123 - .../types/resource.py | 85 - .../types/run_asset_discovery_response.py | 76 - .../types/security_marks.py | 80 - .../types/securitycenter_service.py | 1641 - .../securitycenter_v1p1beta1/types/source.py | 87 - owl-bot-staging/v1p1beta1/mypy.ini | 3 - owl-bot-staging/v1p1beta1/noxfile.py | 184 - ...ed_security_center_create_finding_async.py | 53 - ...ted_security_center_create_finding_sync.py | 53 - ...center_create_notification_config_async.py | 53 - ..._center_create_notification_config_sync.py | 53 - ...ted_security_center_create_source_async.py | 52 - ...ated_security_center_create_source_sync.py | 52 - ...center_delete_notification_config_async.py | 50 - ..._center_delete_notification_config_sync.py | 50 - ...ed_security_center_get_iam_policy_async.py | 53 - ...ted_security_center_get_iam_policy_sync.py | 53 - ...ty_center_get_notification_config_async.py | 52 - ...ity_center_get_notification_config_sync.py | 52 - ..._center_get_organization_settings_async.py | 52 - ...y_center_get_organization_settings_sync.py | 52 - ...erated_security_center_get_source_async.py | 52 - ...nerated_security_center_get_source_sync.py | 52 - ...ated_security_center_group_assets_async.py | 54 - ...rated_security_center_group_assets_sync.py | 54 - ...ed_security_center_group_findings_async.py | 54 - ...ted_security_center_group_findings_sync.py | 54 - ...rated_security_center_list_assets_async.py | 53 - ...erated_security_center_list_assets_sync.py | 53 - ...ted_security_center_list_findings_async.py | 53 - ...ated_security_center_list_findings_sync.py | 53 - ..._center_list_notification_configs_async.py | 53 - ...y_center_list_notification_configs_sync.py | 53 - ...ated_security_center_list_sources_async.py | 53 - ...rated_security_center_list_sources_sync.py | 53 - ...curity_center_run_asset_discovery_async.py | 56 - ...ecurity_center_run_asset_discovery_sync.py | 56 - ...security_center_set_finding_state_async.py | 53 - ..._security_center_set_finding_state_sync.py | 53 - ...ed_security_center_set_iam_policy_async.py | 53 - ...ted_security_center_set_iam_policy_sync.py | 53 - ...urity_center_test_iam_permissions_async.py | 54 - ...curity_center_test_iam_permissions_sync.py | 54 - ...ed_security_center_update_finding_async.py | 51 - ...ted_security_center_update_finding_sync.py | 51 - ...center_update_notification_config_async.py | 51 - ..._center_update_notification_config_sync.py | 51 - ...nter_update_organization_settings_async.py | 51 - ...enter_update_organization_settings_sync.py | 51 - ...rity_center_update_security_marks_async.py | 51 - ...urity_center_update_security_marks_sync.py | 51 - ...ted_security_center_update_source_async.py | 51 - ...ated_security_center_update_source_sync.py | 51 - ...google.cloud.securitycenter.v1p1beta1.json | 3808 --- ...fixup_securitycenter_v1p1beta1_keywords.py | 198 - owl-bot-staging/v1p1beta1/setup.py | 91 - .../v1p1beta1/testing/constraints-3.10.txt | 7 - .../v1p1beta1/testing/constraints-3.11.txt | 7 - .../v1p1beta1/testing/constraints-3.12.txt | 7 - .../v1p1beta1/testing/constraints-3.7.txt | 10 - .../v1p1beta1/testing/constraints-3.8.txt | 7 - .../v1p1beta1/testing/constraints-3.9.txt | 7 - owl-bot-staging/v1p1beta1/tests/__init__.py | 16 - .../v1p1beta1/tests/unit/__init__.py | 16 - .../v1p1beta1/tests/unit/gapic/__init__.py | 16 - .../securitycenter_v1p1beta1/__init__.py | 16 - .../test_security_center.py | 14070 --------- ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...y_health_analytics_custom_modules_async.py | 0 ...ty_health_analytics_custom_modules_sync.py | 0 ...ty_health_analytics_custom_module_async.py | 0 ...ity_health_analytics_custom_module_sync.py | 0 ...tadata_google.cloud.securitycenter.v1.json | 2016 +- ...a_google.cloud.securitycenter.v1beta1.json | 2 +- ...google.cloud.securitycenter.v1p1beta1.json | 2 +- scripts/fixup_securitycenter_v1_keywords.py | 8 + .../securitycenter_v1/test_security_center.py | 17557 +++++++---- 375 files changed, 19197 insertions(+), 143116 deletions(-) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py (97%) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py (95%) rename {owl-bot-staging/v1/google => google}/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py (98%) delete mode 100644 owl-bot-staging/v1/.coveragerc delete mode 100644 owl-bot-staging/v1/.flake8 delete mode 100644 owl-bot-staging/v1/MANIFEST.in delete mode 100644 owl-bot-staging/v1/README.rst delete mode 100644 owl-bot-staging/v1/docs/conf.py delete mode 100644 owl-bot-staging/v1/docs/index.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/services.rst delete mode 100644 owl-bot-staging/v1/docs/securitycenter_v1/types.rst delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py delete mode 100644 owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py delete mode 100644 owl-bot-staging/v1/mypy.ini delete mode 100644 owl-bot-staging/v1/noxfile.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json delete mode 100644 owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py delete mode 100644 owl-bot-staging/v1/setup.py delete mode 100644 owl-bot-staging/v1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1/tests/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py delete mode 100644 owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py delete mode 100644 owl-bot-staging/v1beta1/.coveragerc delete mode 100644 owl-bot-staging/v1beta1/.flake8 delete mode 100644 owl-bot-staging/v1beta1/MANIFEST.in delete mode 100644 owl-bot-staging/v1beta1/README.rst delete mode 100644 owl-bot-staging/v1beta1/docs/conf.py delete mode 100644 owl-bot-staging/v1beta1/docs/index.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst delete mode 100644 owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py delete mode 100644 owl-bot-staging/v1beta1/mypy.ini delete mode 100644 owl-bot-staging/v1beta1/noxfile.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json delete mode 100644 owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py delete mode 100644 owl-bot-staging/v1beta1/setup.py delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1beta1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1beta1/tests/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py delete mode 100644 owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py delete mode 100644 owl-bot-staging/v1p1beta1/.coveragerc delete mode 100644 owl-bot-staging/v1p1beta1/.flake8 delete mode 100644 owl-bot-staging/v1p1beta1/MANIFEST.in delete mode 100644 owl-bot-staging/v1p1beta1/README.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/conf.py delete mode 100644 owl-bot-staging/v1p1beta1/docs/index.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst delete mode 100644 owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py delete mode 100644 owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py delete mode 100644 owl-bot-staging/v1p1beta1/mypy.ini delete mode 100644 owl-bot-staging/v1p1beta1/noxfile.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py delete mode 100644 owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json delete mode 100644 owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py delete mode 100644 owl-bot-staging/v1p1beta1/setup.py delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt delete mode 100644 owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt delete mode 100644 owl-bot-staging/v1p1beta1/tests/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py delete mode 100644 owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py (100%) rename {owl-bot-staging/v1/samples => samples}/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py (100%) diff --git a/google/cloud/securitycenter/__init__.py b/google/cloud/securitycenter/__init__.py index 0605464d..b51a30f1 100644 --- a/google/cloud/securitycenter/__init__.py +++ b/google/cloud/securitycenter/__init__.py @@ -36,6 +36,9 @@ from google.cloud.securitycenter_v1.types.contact_details import Contact, ContactDetails from google.cloud.securitycenter_v1.types.container import Container from google.cloud.securitycenter_v1.types.database import Database +from google.cloud.securitycenter_v1.types.effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from google.cloud.securitycenter_v1.types.exfiltration import ( ExfilResource, Exfiltration, @@ -63,6 +66,12 @@ from google.cloud.securitycenter_v1.types.run_asset_discovery_response import ( RunAssetDiscoveryResponse, ) +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_config import ( + CustomConfig, +) +from google.cloud.securitycenter_v1.types.security_health_analytics_custom_module import ( + SecurityHealthAnalyticsCustomModule, +) from google.cloud.securitycenter_v1.types.security_marks import SecurityMarks from google.cloud.securitycenter_v1.types.securitycenter_service import ( BulkMuteFindingsRequest, @@ -71,14 +80,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -89,12 +102,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -106,6 +125,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -131,6 +151,7 @@ "ContactDetails", "Container", "Database", + "EffectiveSecurityHealthAnalyticsCustomModule", "ExfilResource", "Exfiltration", "ExternalSystem", @@ -151,6 +172,8 @@ "Process", "Resource", "RunAssetDiscoveryResponse", + "CustomConfig", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "BulkMuteFindingsRequest", "BulkMuteFindingsResponse", @@ -158,14 +181,18 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -176,12 +203,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "RunAssetDiscoveryRequest", @@ -193,6 +226,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Source", diff --git a/google/cloud/securitycenter_v1/__init__.py b/google/cloud/securitycenter_v1/__init__.py index 82e69b65..7b1268e0 100644 --- a/google/cloud/securitycenter_v1/__init__.py +++ b/google/cloud/securitycenter_v1/__init__.py @@ -27,6 +27,9 @@ from .types.contact_details import Contact, ContactDetails from .types.container import Container from .types.database import Database +from .types.effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from .types.exfiltration import ExfilResource, Exfiltration from .types.external_system import ExternalSystem from .types.file import File @@ -45,6 +48,10 @@ from .types.process import EnvironmentVariable, Process from .types.resource import Resource from .types.run_asset_discovery_response import RunAssetDiscoveryResponse +from .types.security_health_analytics_custom_config import CustomConfig +from .types.security_health_analytics_custom_module import ( + SecurityHealthAnalyticsCustomModule, +) from .types.security_marks import SecurityMarks from .types.securitycenter_service import ( BulkMuteFindingsRequest, @@ -53,14 +60,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -71,12 +82,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -88,6 +105,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -110,13 +128,17 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", + "CustomConfig", "Cve", "Cvssv3", "Database", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", + "EffectiveSecurityHealthAnalyticsCustomModule", "EnvironmentVariable", "ExfilResource", "Exfiltration", @@ -126,9 +148,11 @@ "Folder", "Geolocation", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -144,12 +168,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "MitreAttack", @@ -163,6 +193,7 @@ "RunAssetDiscoveryRequest", "RunAssetDiscoveryResponse", "SecurityCenterClient", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "ServiceAccountDelegationInfo", "SetFindingStateRequest", @@ -174,6 +205,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Vulnerability", diff --git a/google/cloud/securitycenter_v1/gapic_metadata.json b/google/cloud/securitycenter_v1/gapic_metadata.json index 17110f05..5c23812a 100644 --- a/google/cloud/securitycenter_v1/gapic_metadata.json +++ b/google/cloud/securitycenter_v1/gapic_metadata.json @@ -35,6 +35,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -55,11 +60,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -80,6 +95,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -105,6 +125,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -120,6 +150,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -180,6 +215,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" @@ -220,6 +260,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -240,11 +285,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -265,6 +320,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -290,6 +350,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -305,6 +375,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -365,6 +440,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" @@ -405,6 +485,11 @@ "create_notification_config" ] }, + "CreateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "create_security_health_analytics_custom_module" + ] + }, "CreateSource": { "methods": [ "create_source" @@ -425,11 +510,21 @@ "delete_notification_config" ] }, + "DeleteSecurityHealthAnalyticsCustomModule": { + "methods": [ + "delete_security_health_analytics_custom_module" + ] + }, "GetBigQueryExport": { "methods": [ "get_big_query_export" ] }, + "GetEffectiveSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_effective_security_health_analytics_custom_module" + ] + }, "GetIamPolicy": { "methods": [ "get_iam_policy" @@ -450,6 +545,11 @@ "get_organization_settings" ] }, + "GetSecurityHealthAnalyticsCustomModule": { + "methods": [ + "get_security_health_analytics_custom_module" + ] + }, "GetSource": { "methods": [ "get_source" @@ -475,6 +575,16 @@ "list_big_query_exports" ] }, + "ListDescendantSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_descendant_security_health_analytics_custom_modules" + ] + }, + "ListEffectiveSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_effective_security_health_analytics_custom_modules" + ] + }, "ListFindings": { "methods": [ "list_findings" @@ -490,6 +600,11 @@ "list_notification_configs" ] }, + "ListSecurityHealthAnalyticsCustomModules": { + "methods": [ + "list_security_health_analytics_custom_modules" + ] + }, "ListSources": { "methods": [ "list_sources" @@ -550,6 +665,11 @@ "update_organization_settings" ] }, + "UpdateSecurityHealthAnalyticsCustomModule": { + "methods": [ + "update_security_health_analytics_custom_module" + ] + }, "UpdateSecurityMarks": { "methods": [ "update_security_marks" diff --git a/google/cloud/securitycenter_v1/services/security_center/async_client.py b/google/cloud/securitycenter_v1/services/security_center/async_client.py index b7d50223..1a7a5399 100644 --- a/google/cloud/securitycenter_v1/services/security_center/async_client.py +++ b/google/cloud/securitycenter_v1/services/security_center/async_client.py @@ -59,8 +59,14 @@ connection, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -68,7 +74,6 @@ kubernetes, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -76,6 +81,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import file from google.cloud.securitycenter_v1.types import finding @@ -109,6 +118,12 @@ class SecurityCenterAsyncClient: parse_big_query_export_path = staticmethod( SecurityCenterClient.parse_big_query_export_path ) + effective_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.effective_security_health_analytics_custom_module_path + ) + parse_effective_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path + ) external_system_path = staticmethod(SecurityCenterClient.external_system_path) parse_external_system_path = staticmethod( SecurityCenterClient.parse_external_system_path @@ -129,6 +144,12 @@ class SecurityCenterAsyncClient: parse_organization_settings_path = staticmethod( SecurityCenterClient.parse_organization_settings_path ) + security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.security_health_analytics_custom_module_path + ) + parse_security_health_analytics_custom_module_path = staticmethod( + SecurityCenterClient.parse_security_health_analytics_custom_module_path + ) security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) parse_security_marks_path = staticmethod( SecurityCenterClient.parse_security_marks_path @@ -422,6 +443,151 @@ async def sample_bulk_mute_findings(): # Done; return the response. return response + async def create_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = await client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for creating security + health analytics custom modules. + parent (:class:`str`): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def create_source( self, request: Optional[ @@ -1142,6 +1308,112 @@ async def sample_delete_notification_config(): metadata=metadata, ) + async def delete_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + await client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for deleting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + async def get_big_query_export( self, request: Optional[ @@ -1771,16 +2043,22 @@ async def sample_get_organization_settings(): # Done; return the response. return response - async def get_source( + async def get_effective_security_health_analytics_custom_module( self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + request: Optional[ + Union[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, *, name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -1793,28 +2071,33 @@ async def get_source( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_get_source(): + async def sample_get_effective_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( name="name_value", ) # Make the request - response = await client.get_source(request=request) + response = await client.get_effective_security_health_analytics_custom_module(request=request) # Handle the response print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. + request (Optional[Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting effective + security health analytics custom + modules. name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -1826,13 +2109,21 @@ async def sample_get_source(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. """ # Create or coerce a protobuf request object. @@ -1845,7 +2136,9 @@ async def sample_get_source(): "the individual field arguments should be set." ) - request = securitycenter_service.GetSourceRequest(request) + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -1855,7 +2148,7 @@ async def sample_get_source(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, + self._client._transport.get_effective_security_health_analytics_custom_module, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -1887,18 +2180,21 @@ async def sample_get_source(): # Done; return the response. return response - async def group_assets( + async def get_security_health_analytics_custom_module( self, request: Optional[ - Union[securitycenter_service.GroupAssetsRequest, dict] + Union[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] ] = None, *, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -1911,27 +2207,36 @@ async def group_assets( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_group_assets(): + async def sample_get_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", ) # Make the request - page_result = client.group_assets(request=request) + response = await client.get_security_health_analytics_custom_module(request=request) # Handle the response - async for response in page_result: - print(response) + print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for getting security + health analytics custom modules. + name (:class:`str`): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -1939,21 +2244,42 @@ async def sample_group_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest( + request + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, + self._client._transport.get_security_health_analytics_custom_module, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -1962,7 +2288,221 @@ async def sample_group_assets(): core_exceptions.DeadlineExceeded, core_exceptions.ServiceUnavailable, ), - deadline=480.0, + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def get_source( + self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = await client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): + The request object. Request message for getting a source. + name (:class:`str`): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.GetSourceRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.get_source, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def group_assets( + self, + request: Optional[ + Union[securitycenter_service.GroupAssetsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsAsyncPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): + The request object. Request message for grouping by + assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: + Response message for grouping by + assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.GroupAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.group_assets, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, ), default_timeout=480.0, client_info=DEFAULT_CLIENT_INFO, @@ -2196,9 +2736,371 @@ async def sample_list_assets(): async for response in page_result: print(response) - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_assets, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListAssetsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_descendant_security_health_analytics_custom_modules( + self, + request: Optional[ + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (:class:`str`): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_findings( + self, + request: Optional[ + Union[securitycenter_service.ListFindingsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsAsyncPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.list_findings, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=480.0, + ), + default_timeout=480.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__aiter__` convenience method. + response = pagers.ListFindingsAsyncPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + async def list_mute_configs( + self, + request: Optional[ + Union[securitycenter_service.ListMuteConfigsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsAsyncPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + async for response in page_result: + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (:class:`str`): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2206,31 +3108,36 @@ async def sample_list_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: + Response message for listing mute + configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListMuteConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( - initial=0.1, - maximum=60.0, - multiplier=1.3, - predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, + self._client._transport.list_mute_configs, + default_timeout=None, client_info=DEFAULT_CLIENT_INFO, ) @@ -2250,7 +3157,7 @@ async def sample_list_assets(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( + response = pagers.ListMuteConfigsAsyncPager( method=rpc, request=request, response=response, @@ -2260,20 +3167,18 @@ async def sample_list_assets(): # Done; return the response. return response - async def list_findings( + async def list_notification_configs( self, request: Optional[ - Union[securitycenter_service.ListFindingsRequest, dict] + Union[securitycenter_service.ListNotificationConfigsRequest, dict] ] = None, *, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings + ) -> pagers.ListNotificationConfigsAsyncPager: + r"""Lists notification configs. .. code-block:: python @@ -2286,25 +3191,35 @@ async def list_findings( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_findings(): + async def sample_list_notification_configs(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( + request = securitycenter_v1.ListNotificationConfigsRequest( parent="parent_value", ) # Make the request - page_result = client.list_findings(request=request) + page_result = client.list_notification_configs(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): + The request object. Request message for listing + notification configs. + parent (:class:`str`): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2312,21 +3227,35 @@ async def sample_list_findings(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: Response message for listing - findings. + notification configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = securitycenter_service.ListNotificationConfigsRequest(request) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, + self._client._transport.list_notification_configs, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -2335,9 +3264,9 @@ async def sample_list_findings(): core_exceptions.DeadlineExceeded, core_exceptions.ServiceUnavailable, ), - deadline=480.0, + deadline=60.0, ), - default_timeout=480.0, + default_timeout=60.0, client_info=DEFAULT_CLIENT_INFO, ) @@ -2357,7 +3286,7 @@ async def sample_list_findings(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( + response = pagers.ListNotificationConfigsAsyncPager( method=rpc, request=request, response=response, @@ -2367,18 +3296,25 @@ async def sample_list_findings(): # Done; return the response. return response - async def list_mute_configs( + async def list_effective_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListMuteConfigsRequest, dict] + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsAsyncPager: - r"""Lists mute configs. + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. .. code-block:: python @@ -2391,32 +3327,34 @@ async def list_mute_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_mute_configs(): + async def sample_list_effective_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_mute_configs(request=request) + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing effective + security health analytics custom + modules. parent (:class:`str`): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2428,9 +3366,10 @@ async def sample_list_mute_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: - Response message for listing mute - configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing + effective security health analytics + custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2446,7 +3385,9 @@ async def sample_list_mute_configs(): "the individual field arguments should be set." ) - request = securitycenter_service.ListMuteConfigsRequest(request) + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -2456,8 +3397,18 @@ async def sample_list_mute_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_mute_configs, - default_timeout=None, + self._client._transport.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, client_info=DEFAULT_CLIENT_INFO, ) @@ -2477,7 +3428,7 @@ async def sample_list_mute_configs(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListMuteConfigsAsyncPager( + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager( method=rpc, request=request, response=response, @@ -2487,18 +3438,25 @@ async def sample_list_mute_configs(): # Done; return the response. return response - async def list_notification_configs( + async def list_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListNotificationConfigsRequest, dict] + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. .. code-block:: python @@ -2511,31 +3469,33 @@ async def list_notification_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - async def sample_list_notification_configs(): + async def sample_list_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterAsyncClient() # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_notification_configs(request=request) + page_result = client.list_security_health_analytics_custom_modules(request=request) # Handle the response async for response in page_result: print(response) Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. + request (Optional[Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]]): + The request object. Request message for listing security + health analytics custom modules. parent (:class:`str`): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2547,9 +3507,9 @@ async def sample_list_notification_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: + Response message for listing security + health analytics custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2565,7 +3525,11 @@ async def sample_list_notification_configs(): "the individual field arguments should be set." ) - request = securitycenter_service.ListNotificationConfigsRequest(request) + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) # If we have keyword arguments corresponding to fields on the # request, apply these. @@ -2575,7 +3539,7 @@ async def sample_list_notification_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, + self._client._transport.list_security_health_analytics_custom_modules, default_retry=retries.Retry( initial=0.1, maximum=60.0, @@ -2606,7 +3570,7 @@ async def sample_list_notification_configs(): # This method is paged; wrap the response in a pager, which provides # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( + response = pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager( method=rpc, request=request, response=response, @@ -4009,6 +4973,151 @@ async def sample_update_organization_settings(): # Done; return the response. return response + async def update_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + async def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterAsyncClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = await client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [security_health_analytics_custom_module, update_mask] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = gapic_v1.method_async.wrap_method( + self._client._transport.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=DEFAULT_CLIENT_INFO, + ) + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ( + "security_health_analytics_custom_module.name", + request.security_health_analytics_custom_module.name, + ), + ) + ), + ) + + # Send the request. + response = await rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + async def update_source( self, request: Optional[ diff --git a/google/cloud/securitycenter_v1/services/security_center/client.py b/google/cloud/securitycenter_v1/services/security_center/client.py index 9175c80c..a5124395 100644 --- a/google/cloud/securitycenter_v1/services/security_center/client.py +++ b/google/cloud/securitycenter_v1/services/security_center/client.py @@ -63,8 +63,14 @@ connection, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -72,7 +78,6 @@ kubernetes, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -80,6 +85,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import file from google.cloud.securitycenter_v1.types import finding @@ -261,6 +270,28 @@ def parse_big_query_export_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def effective_security_health_analytics_custom_module_path( + organization: str, + effective_custom_module: str, + ) -> str: + """Returns a fully-qualified effective_security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format( + organization=organization, + effective_custom_module=effective_custom_module, + ) + + @staticmethod + def parse_effective_security_health_analytics_custom_module_path( + path: str, + ) -> Dict[str, str]: + """Parses a effective_security_health_analytics_custom_module path into its component segments.""" + m = re.match( + r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/effectiveCustomModules/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def external_system_path( organization: str, @@ -366,6 +397,26 @@ def parse_organization_settings_path(path: str) -> Dict[str, str]: ) return m.groupdict() if m else {} + @staticmethod + def security_health_analytics_custom_module_path( + organization: str, + custom_module: str, + ) -> str: + """Returns a fully-qualified security_health_analytics_custom_module string.""" + return "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format( + organization=organization, + custom_module=custom_module, + ) + + @staticmethod + def parse_security_health_analytics_custom_module_path(path: str) -> Dict[str, str]: + """Parses a security_health_analytics_custom_module path into its component segments.""" + m = re.match( + r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/customModules/(?P.+?)$", + path, + ) + return m.groupdict() if m else {} + @staticmethod def security_marks_path( organization: str, @@ -797,6 +848,156 @@ def sample_bulk_mute_findings(): # Done; return the response. return response + def create_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_create_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( + parent="parent_value", + ) + + # Make the request + response = client.create_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for creating security + health analytics custom modules. + parent (str): + Required. Resource name of the new + custom module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics + custom module to create. The provided + name is ignored and reset with provided + parent information and server-generated + ID. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent, security_health_analytics_custom_module]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.create_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def create_source( self, request: Optional[ @@ -1525,6 +1726,117 @@ def sample_delete_notification_config(): metadata=metadata, ) + def delete_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> None: + r"""Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_delete_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", + ) + + # Make the request + client.delete_security_health_analytics_custom_module(request=request) + + Args: + request (Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for deleting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.delete_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + def get_big_query_export( self, request: Optional[ @@ -2125,16 +2437,22 @@ def sample_get_organization_settings(): # Done; return the response. return response - def get_source( + def get_effective_security_health_analytics_custom_module( self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + request: Optional[ + Union[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, *, name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -2147,28 +2465,33 @@ def get_source( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_get_source(): + def sample_get_effective_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( + request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( name="name_value", ) # Make the request - response = client.get_source(request=request) + response = client.get_effective_security_health_analytics_custom_module(request=request) # Handle the response print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. + request (Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting effective + security health analytics custom + modules. name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". + Required. Name of the effective + custom module to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" This corresponds to the ``name`` field on the ``request`` instance; if ``request`` is provided, this @@ -2180,13 +2503,21 @@ def sample_get_source(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the representation of + a Security Health Analytics custom module at a + specified level of the resource hierarchy: + organization, folder, or project. If a custom module + is inherited from a parent organization or folder, + the value of the enablementState property in + EffectiveSecurityHealthAnalyticsCustomModule is set + to the value that is effective in the parent, instead + of INHERITED. For example, if the module is enabled + in a parent organization or folder, the effective + enablement_state for the module in all child folders + or projects is also enabled. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. """ # Create or coerce a protobuf request object. @@ -2200,11 +2531,16 @@ def sample_get_source(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. + # in a securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) + if not isinstance( + request, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + ): + request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if name is not None: @@ -2212,7 +2548,9 @@ def sample_get_source(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] + rpc = self._transport._wrapped_methods[ + self._transport.get_effective_security_health_analytics_custom_module + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2231,18 +2569,21 @@ def sample_get_source(): # Done; return the response. return response - def group_assets( + def get_security_health_analytics_custom_module( self, request: Optional[ - Union[securitycenter_service.GroupAssetsRequest, dict] + Union[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] ] = None, *, + name: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Retrieves a SecurityHealthAnalyticsCustomModule. .. code-block:: python @@ -2255,22 +2596,253 @@ def group_assets( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_group_assets(): + def sample_get_security_health_analytics_custom_module(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", + request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( + name="name_value", ) # Make the request - page_result = client.group_assets(request=request) + response = client.get_security_health_analytics_custom_module(request=request) # Handle the response - for response in page_result: - print(response) + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for getting security + health analytics custom modules. + name (str): + Required. Name of the custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.get_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def get_source( + self, + request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, + *, + name: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> source.Source: + r"""Gets a source. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_get_source(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GetSourceRequest( + name="name_value", + ) + + # Make the request + response = client.get_source(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): + The request object. Request message for getting a source. + name (str): + Required. Relative resource name of the source. Its + format is + "organizations/[organization_id]/source/[source_id]". + + This corresponds to the ``name`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([name]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.GetSourceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.GetSourceRequest): + request = securitycenter_service.GetSourceRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if name is not None: + request.name = name + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.get_source] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("name", request.name),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def group_assets( + self, + request: Optional[ + Union[securitycenter_service.GroupAssetsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.GroupAssetsPager: + r"""Filters an organization's assets and groups them by + their specified properties. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_group_assets(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.GroupAssetsRequest( + parent="parent_value", + group_by="group_by_value", + ) + + # Make the request + page_result = client.group_assets(request=request) + + # Handle the response + for response in page_result: + print(response) Args: request (Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]): @@ -2521,9 +3093,348 @@ def sample_list_assets(): for response in page_result: print(response) - Args: - request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. + Args: + request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): + The request object. Request message for listing assets. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: + Response message for listing assets. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListAssetsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListAssetsRequest): + request = securitycenter_service.ListAssetsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_assets] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListAssetsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_descendant_security_health_analytics_custom_modules( + self, + request: Optional[ + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_descendant_security_health_analytics_custom_modules(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing + descendant security health analytics + custom modules. + parent (str): + Required. Name of parent to list + descendant custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + descendant security health analytics + custom modules. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ): + request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.list_descendant_security_health_analytics_custom_modules + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_findings( + self, + request: Optional[ + Union[securitycenter_service.ListFindingsRequest, dict] + ] = None, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListFindingsPager: + r"""Lists an organization or source's findings. + + To list across all sources provide a ``-`` as the source id. + Example: /v1/organizations/{organization_id}/sources/-/findings + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_findings(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListFindingsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_findings(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): + The request object. Request message for listing findings. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: + Response message for listing + findings. + Iterating over this object will yield + results and resolve additional pages + automatically. + + """ + # Create or coerce a protobuf request object. + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.ListFindingsRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, securitycenter_service.ListFindingsRequest): + request = securitycenter_service.ListFindingsRequest(request) + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[self._transport.list_findings] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", request.parent),)), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # This method is paged; wrap the response in a pager, which provides + # an `__iter__` convenience method. + response = pagers.ListFindingsPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + + def list_mute_configs( + self, + request: Optional[ + Union[securitycenter_service.ListMuteConfigsRequest, dict] + ] = None, + *, + parent: Optional[str] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.ListMuteConfigsPager: + r"""Lists mute configs. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_list_mute_configs(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.ListMuteConfigsRequest( + parent="parent_value", + ) + + # Make the request + page_result = client.list_mute_configs(request=request) + + # Handle the response + for response in page_result: + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): + The request object. Request message for listing mute + configs at a given scope e.g. + organization, folder or project. + parent (str): + Required. The parent, which owns the collection of mute + configs. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2531,24 +3442,38 @@ def sample_list_assets(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. + google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: + Response message for listing mute + configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. + # in a securitycenter_service.ListMuteConfigsRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) + if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): + request = securitycenter_service.ListMuteConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] + rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] # Certain fields should be provided within the metadata header; # add these here. @@ -2566,7 +3491,7 @@ def sample_list_assets(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListAssetsPager( + response = pagers.ListMuteConfigsPager( method=rpc, request=request, response=response, @@ -2576,20 +3501,18 @@ def sample_list_assets(): # Done; return the response. return response - def list_findings( + def list_notification_configs( self, request: Optional[ - Union[securitycenter_service.ListFindingsRequest, dict] + Union[securitycenter_service.ListNotificationConfigsRequest, dict] ] = None, *, + parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings + ) -> pagers.ListNotificationConfigsPager: + r"""Lists notification configs. .. code-block:: python @@ -2602,25 +3525,35 @@ def list_findings( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_findings(): + def sample_list_notification_configs(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( + request = securitycenter_v1.ListNotificationConfigsRequest( parent="parent_value", ) # Make the request - page_result = client.list_findings(request=request) + page_result = client.list_notification_configs(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. + request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): + The request object. Request message for listing + notification configs. + parent (str): + Required. The name of the parent in which to list the + notification configurations. Its format is + "organizations/[organization_id]", + "folders/[folder_id]", or "projects/[project_id]". + + This corresponds to the ``parent`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2628,25 +3561,42 @@ def sample_list_findings(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: + google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: Response message for listing - findings. + notification configs. Iterating over this object will yield results and resolve additional pages automatically. """ # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any([parent]) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. + # in a securitycenter_service.ListNotificationConfigsRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) + if not isinstance( + request, securitycenter_service.ListNotificationConfigsRequest + ): + request = securitycenter_service.ListNotificationConfigsRequest(request) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if parent is not None: + request.parent = parent # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] + rpc = self._transport._wrapped_methods[ + self._transport.list_notification_configs + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2664,7 +3614,7 @@ def sample_list_findings(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListFindingsPager( + response = pagers.ListNotificationConfigsPager( method=rpc, request=request, response=response, @@ -2674,18 +3624,25 @@ def sample_list_findings(): # Done; return the response. return response - def list_mute_configs( + def list_effective_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListMuteConfigsRequest, dict] + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsPager: - r"""Lists mute configs. + ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. .. code-block:: python @@ -2698,32 +3655,34 @@ def list_mute_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_mute_configs(): + def sample_list_effective_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( + request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_mute_configs(request=request) + page_result = client.list_effective_security_health_analytics_custom_modules(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. + request (Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing effective + security health analytics custom + modules. parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". + Required. Name of parent to list + effective custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2735,9 +3694,10 @@ def sample_list_mute_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: - Response message for listing mute - configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + Response message for listing + effective security health analytics + custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2754,11 +3714,16 @@ def sample_list_mute_configs(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListMuteConfigsRequest. + # in a securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): - request = securitycenter_service.ListMuteConfigsRequest(request) + if not isinstance( + request, + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ): + request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if parent is not None: @@ -2766,7 +3731,9 @@ def sample_list_mute_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] + rpc = self._transport._wrapped_methods[ + self._transport.list_effective_security_health_analytics_custom_modules + ] # Certain fields should be provided within the metadata header; # add these here. @@ -2784,7 +3751,7 @@ def sample_list_mute_configs(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListMuteConfigsPager( + response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager( method=rpc, request=request, response=response, @@ -2794,18 +3761,25 @@ def sample_list_mute_configs(): # Done; return the response. return response - def list_notification_configs( + def list_security_health_analytics_custom_modules( self, request: Optional[ - Union[securitycenter_service.ListNotificationConfigsRequest, dict] + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ] ] = None, *, parent: Optional[str] = None, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Union[float, object] = gapic_v1.method.DEFAULT, metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. + ) -> pagers.ListSecurityHealthAnalyticsCustomModulesPager: + r"""Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. .. code-block:: python @@ -2818,31 +3792,33 @@ def list_notification_configs( # https://googleapis.dev/python/google-api-core/latest/client_options.html from google.cloud import securitycenter_v1 - def sample_list_notification_configs(): + def sample_list_security_health_analytics_custom_modules(): # Create a client client = securitycenter_v1.SecurityCenterClient() # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( + request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( parent="parent_value", ) # Make the request - page_result = client.list_notification_configs(request=request) + page_result = client.list_security_health_analytics_custom_modules(request=request) # Handle the response for response in page_result: print(response) Args: - request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. + request (Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]): + The request object. Request message for listing security + health analytics custom modules. parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". + Required. Name of parent to list + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings" This corresponds to the ``parent`` field on the ``request`` instance; if ``request`` is provided, this @@ -2854,9 +3830,9 @@ def sample_list_notification_configs(): sent along with the request as metadata. Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. + google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager: + Response message for listing security + health analytics custom modules. Iterating over this object will yield results and resolve additional pages automatically. @@ -2873,13 +3849,18 @@ def sample_list_notification_configs(): ) # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. + # in a securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest. # There's no risk of modifying the input as we've already verified # there are no flattened fields. if not isinstance( - request, securitycenter_service.ListNotificationConfigsRequest + request, + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): - request = securitycenter_service.ListNotificationConfigsRequest(request) + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) # If we have keyword arguments corresponding to fields on the # request, apply these. if parent is not None: @@ -2888,7 +3869,7 @@ def sample_list_notification_configs(): # Wrap the RPC method; this adds retry and timeout information, # and friendly error handling. rpc = self._transport._wrapped_methods[ - self._transport.list_notification_configs + self._transport.list_security_health_analytics_custom_modules ] # Certain fields should be provided within the metadata header; @@ -2907,7 +3888,7 @@ def sample_list_notification_configs(): # This method is paged; wrap the response in a pager, which provides # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( + response = pagers.ListSecurityHealthAnalyticsCustomModulesPager( method=rpc, request=request, response=response, @@ -4293,6 +5274,156 @@ def sample_update_organization_settings(): # Done; return the response. return response + def update_security_health_analytics_custom_module( + self, + request: Optional[ + Union[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ] + ] = None, + *, + security_health_analytics_custom_module: Optional[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = None, + update_mask: Optional[field_mask_pb2.FieldMask] = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Union[float, object] = gapic_v1.method.DEFAULT, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + .. code-block:: python + + # This snippet has been automatically generated and should be regarded as a + # code template only. + # It will require modifications to work: + # - It may require correct/in-range values for request initialization. + # - It may require specifying regional endpoints when creating the service + # client as shown in: + # https://googleapis.dev/python/google-api-core/latest/client_options.html + from google.cloud import securitycenter_v1 + + def sample_update_security_health_analytics_custom_module(): + # Create a client + client = securitycenter_v1.SecurityCenterClient() + + # Initialize request argument(s) + request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( + ) + + # Make the request + response = client.update_security_health_analytics_custom_module(request=request) + + # Handle the response + print(response) + + Args: + request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]): + The request object. Request message for updating security + health analytics custom modules. + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics + custom module to update. + + This corresponds to the ``security_health_analytics_custom_module`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + This corresponds to the ``update_mask`` field + on the ``request`` instance; if ``request`` is provided, this + should not be set. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + # Create or coerce a protobuf request object. + # Quick check: If we got a request object, we should *not* have + # gotten any keyword arguments that map to the request. + has_flattened_params = any( + [security_health_analytics_custom_module, update_mask] + ) + if request is not None and has_flattened_params: + raise ValueError( + "If the `request` argument is set, then none of " + "the individual field arguments should be set." + ) + + # Minor optimization to avoid making a copy if the user passes + # in a securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + ): + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest( + request + ) + ) + # If we have keyword arguments corresponding to fields on the + # request, apply these. + if security_health_analytics_custom_module is not None: + request.security_health_analytics_custom_module = ( + security_health_analytics_custom_module + ) + if update_mask is not None: + request.update_mask = update_mask + + # Wrap the RPC method; this adds retry and timeout information, + # and friendly error handling. + rpc = self._transport._wrapped_methods[ + self._transport.update_security_health_analytics_custom_module + ] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ( + "security_health_analytics_custom_module.name", + request.security_health_analytics_custom_module.name, + ), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def update_source( self, request: Optional[ diff --git a/google/cloud/securitycenter_v1/services/security_center/pagers.py b/google/cloud/securitycenter_v1/services/security_center/pagers.py index cae5c834..b06f11ac 100644 --- a/google/cloud/securitycenter_v1/services/security_center/pagers.py +++ b/google/cloud/securitycenter_v1/services/security_center/pagers.py @@ -26,8 +26,10 @@ from google.cloud.securitycenter_v1.types import ( bigquery_export, + effective_security_health_analytics_custom_module, mute_config, notification_config, + security_health_analytics_custom_module, securitycenter_service, source, ) @@ -423,6 +425,162 @@ def __repr__(self) -> str: return "{0}<{1!r}>".format(self.__class__.__name__, self._response) +class ListDescendantSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + class ListFindingsPager: """A pager for iterating through ``list_findings`` requests. @@ -819,6 +977,321 @@ def __repr__(self) -> str: return "{0}<{1!r}>".format(self.__class__.__name__, self._response) +class ListEffectiveSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.effective_security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``effective_security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``effective_security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( + request + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.effective_security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__iter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages( + self, + ) -> Iterator[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__( + self, + ) -> Iterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + for page in self.pages: + yield from page.security_health_analytics_custom_modules + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + +class ListSecurityHealthAnalyticsCustomModulesAsyncPager: + """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. + + This class thinly wraps an initial + :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and + provides an ``__aiter__`` method to iterate through its + ``security_health_analytics_custom_modules`` field. + + If there are more pages, the ``__aiter__`` method will make additional + ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate + through the ``security_health_analytics_custom_modules`` field on the + corresponding responses. + + All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[ + ..., + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ], + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiates the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): + The initial request object. + response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest( + request + ) + ) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + async def pages( + self, + ) -> AsyncIterator[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = await self._method(self._request, metadata=self._metadata) + yield self._response + + def __aiter__( + self, + ) -> AsyncIterator[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ]: + async def async_generator(): + async for page in self.pages: + for response in page.security_health_analytics_custom_modules: + yield response + + return async_generator() + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + class ListSourcesPager: """A pager for iterating through ``list_sources`` requests. diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/base.py b/google/cloud/securitycenter_v1/services/security_center/transports/base.py index d38838e3..33860dca 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/base.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/base.py @@ -29,6 +29,10 @@ from google.protobuf import empty_pb2 # type: ignore from google.cloud.securitycenter_v1 import gapic_version as package_version +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -36,8 +40,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -148,6 +155,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.create_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.create_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.create_source: gapic_v1.method.wrap_method( self.create_source, default_timeout=60.0, @@ -178,6 +190,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.delete_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.delete_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.get_big_query_export: gapic_v1.method.wrap_method( self.get_big_query_export, default_timeout=None, @@ -233,6 +250,36 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.get_effective_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_effective_security_health_analytics_custom_module, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.get_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.get_security_health_analytics_custom_module, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.get_source: gapic_v1.method.wrap_method( self.get_source, default_retry=retries.Retry( @@ -293,6 +340,21 @@ def _prep_wrapped_messages(self, client_info): default_timeout=480.0, client_info=client_info, ), + self.list_descendant_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_descendant_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.list_findings: gapic_v1.method.wrap_method( self.list_findings, default_retry=retries.Retry( @@ -328,6 +390,36 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.list_effective_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_effective_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), + self.list_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( + self.list_security_health_analytics_custom_modules, + default_retry=retries.Retry( + initial=0.1, + maximum=60.0, + multiplier=1.3, + predicate=retries.if_exception_type( + core_exceptions.DeadlineExceeded, + core_exceptions.ServiceUnavailable, + ), + deadline=60.0, + ), + default_timeout=60.0, + client_info=client_info, + ), self.list_sources: gapic_v1.method.wrap_method( self.list_sources, default_retry=retries.Retry( @@ -403,6 +495,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=60.0, client_info=client_info, ), + self.update_security_health_analytics_custom_module: gapic_v1.method.wrap_method( + self.update_security_health_analytics_custom_module, + default_timeout=60.0, + client_info=client_info, + ), self.update_source: gapic_v1.method.wrap_method( self.update_source, default_timeout=60.0, @@ -458,6 +555,20 @@ def bulk_mute_findings( ]: raise NotImplementedError() + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def create_source( self, @@ -515,6 +626,15 @@ def delete_notification_config( ]: raise NotImplementedError() + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Union[empty_pb2.Empty, Awaitable[empty_pb2.Empty]], + ]: + raise NotImplementedError() + @property def get_big_query_export( self, @@ -568,6 +688,34 @@ def get_organization_settings( ]: raise NotImplementedError() + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Union[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + Awaitable[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Union[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def get_source( self, @@ -613,6 +761,22 @@ def list_assets( ]: raise NotImplementedError() + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + Union[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + @property def list_findings( self, @@ -649,6 +813,36 @@ def list_notification_configs( ]: raise NotImplementedError() + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + Union[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Union[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ], + ]: + raise NotImplementedError() + @property def list_sources( self, @@ -763,6 +957,20 @@ def update_organization_settings( ]: raise NotImplementedError() + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Union[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ], + ]: + raise NotImplementedError() + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py b/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py index 45cd7a02..dd20ebcf 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py @@ -26,6 +26,10 @@ from google.protobuf import empty_pb2 # type: ignore import grpc # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -33,8 +37,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -295,6 +302,43 @@ def bulk_mute_findings( ) return self._stubs["bulk_mute_findings"] + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "create_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["create_security_health_analytics_custom_module"] + @property def create_source( self, @@ -459,6 +503,41 @@ def delete_notification_config( ) return self._stubs["delete_notification_config"] + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty, + ]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + ~.Empty]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "delete_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["delete_security_health_analytics_custom_module"] + @property def get_big_query_export( self, @@ -601,6 +680,71 @@ def get_organization_settings( ) return self._stubs["get_organization_settings"] + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + ~.EffectiveSecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_effective_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_effective_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_effective_security_health_analytics_custom_module"] + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_security_health_analytics_custom_module"] + @property def get_source( self, @@ -721,6 +865,45 @@ def list_assets( ) return self._stubs["list_assets"] + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + ~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if ( + "list_descendant_security_health_analytics_custom_modules" + not in self._stubs + ): + self._stubs[ + "list_descendant_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_descendant_security_health_analytics_custom_modules"] + @property def list_findings( self, @@ -811,6 +994,80 @@ def list_notification_configs( ) return self._stubs["list_notification_configs"] + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + ~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_effective_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_effective_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_effective_security_health_analytics_custom_modules"] + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + ~.ListSecurityHealthAnalyticsCustomModulesResponse]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_security_health_analytics_custom_modules"] + @property def list_sources( self, @@ -1125,6 +1382,44 @@ def update_organization_settings( ) return self._stubs["update_organization_settings"] + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + ~.SecurityHealthAnalyticsCustomModule]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "update_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["update_security_health_analytics_custom_module"] + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py b/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py index 720a77df..410c1c98 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py @@ -26,6 +26,10 @@ import grpc # type: ignore from grpc.experimental import aio # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -33,8 +37,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -301,6 +308,45 @@ def bulk_mute_findings( ) return self._stubs["bulk_mute_findings"] + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the create security health + analytics custom module method over gRPC. + + Creates a resident + SecurityHealthAnalyticsCustomModule at the scope of the + given CRM parent, and also creates inherited + SecurityHealthAnalyticsCustomModules for all CRM + descendants of the given parent. These modules are + enabled by default. + + Returns: + Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "create_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "create_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["create_security_health_analytics_custom_module"] + @property def create_source( self, @@ -473,6 +519,41 @@ def delete_notification_config( ) return self._stubs["delete_notification_config"] + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[empty_pb2.Empty], + ]: + r"""Return a callable for the delete security health + analytics custom module method over gRPC. + + Deletes the specified + SecurityHealthAnalyticsCustomModule and all of its + descendants in the CRM hierarchy. This method is only + supported for resident custom modules. + + Returns: + Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.Empty]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "delete_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "delete_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=empty_pb2.Empty.FromString, + ) + return self._stubs["delete_security_health_analytics_custom_module"] + @property def get_big_query_export( self, @@ -615,6 +696,75 @@ def get_organization_settings( ) return self._stubs["get_organization_settings"] + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the get effective security health + analytics custom module method over gRPC. + + Retrieves an + EffectiveSecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.EffectiveSecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_effective_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_effective_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_effective_security_health_analytics_custom_module"] + + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the get security health analytics + custom module method over gRPC. + + Retrieves a SecurityHealthAnalyticsCustomModule. + + Returns: + Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "get_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "get_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["get_security_health_analytics_custom_module"] + @property def get_source( self, @@ -735,6 +885,47 @@ def list_assets( ) return self._stubs["list_assets"] + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + Awaitable[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list descendant security + health analytics custom modules method over gRPC. + + Returns a list of all resident + SecurityHealthAnalyticsCustomModules under the given CRM + parent and all of the parent’s CRM descendants. + + Returns: + Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if ( + "list_descendant_security_health_analytics_custom_modules" + not in self._stubs + ): + self._stubs[ + "list_descendant_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_descendant_security_health_analytics_custom_modules"] + @property def list_findings( self, @@ -825,6 +1016,84 @@ def list_notification_configs( ) return self._stubs["list_notification_configs"] + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + Awaitable[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list effective security health + analytics custom modules method over gRPC. + + Returns a list of all + EffectiveSecurityHealthAnalyticsCustomModules for the + given parent. This includes resident modules defined at + the scope of the parent, and inherited modules, + inherited from CRM ancestors. + + Returns: + Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_effective_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_effective_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_effective_security_health_analytics_custom_modules"] + + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse + ], + ]: + r"""Return a callable for the list security health analytics + custom modules method over gRPC. + + Returns a list of all + SecurityHealthAnalyticsCustomModules for the given + parent. This includes resident modules defined at the + scope of the parent, and inherited modules, inherited + from CRM ancestors. + + Returns: + Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], + Awaitable[~.ListSecurityHealthAnalyticsCustomModulesResponse]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "list_security_health_analytics_custom_modules" not in self._stubs: + self._stubs[ + "list_security_health_analytics_custom_modules" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules", + request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, + response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, + ) + return self._stubs["list_security_health_analytics_custom_modules"] + @property def list_sources( self, @@ -1145,6 +1414,46 @@ def update_organization_settings( ) return self._stubs["update_organization_settings"] + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ], + ]: + r"""Return a callable for the update security health + analytics custom module method over gRPC. + + Updates the SecurityHealthAnalyticsCustomModule under + the given name based on the given update mask. Updating + the enablement state is supported on both resident and + inherited modules (though resident modules cannot have + an enablement state of “inherited”). Updating the + display name and custom config of a module is supported + on resident modules only. + + Returns: + Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], + Awaitable[~.SecurityHealthAnalyticsCustomModule]]: + A function that, when called, will call the underlying RPC + on the server. + """ + # Generate a "stub function" on-the-fly which will actually make + # the request. + # gRPC handles serialization and deserialization, so we just need + # to pass in the functions for each. + if "update_security_health_analytics_custom_module" not in self._stubs: + self._stubs[ + "update_security_health_analytics_custom_module" + ] = self.grpc_channel.unary_unary( + "/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule", + request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, + response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, + ) + return self._stubs["update_security_health_analytics_custom_module"] + @property def update_source( self, diff --git a/google/cloud/securitycenter_v1/services/security_center/transports/rest.py b/google/cloud/securitycenter_v1/services/security_center/transports/rest.py index cb199735..5a1ed8f0 100644 --- a/google/cloud/securitycenter_v1/services/security_center/transports/rest.py +++ b/google/cloud/securitycenter_v1/services/security_center/transports/rest.py @@ -48,6 +48,10 @@ from google.longrunning import operations_pb2 # type: ignore from google.protobuf import empty_pb2 # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -55,8 +59,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import mute_config @@ -132,6 +139,14 @@ def post_create_notification_config(self, response): logging.log(f"Received response: {response}") return response + def pre_create_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_create_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_create_source(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -152,6 +167,10 @@ def pre_delete_notification_config(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata + def pre_delete_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + def pre_get_big_query_export(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -160,6 +179,14 @@ def post_get_big_query_export(self, response): logging.log(f"Received response: {response}") return response + def pre_get_effective_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_effective_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_iam_policy(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -192,6 +219,14 @@ def post_get_organization_settings(self, response): logging.log(f"Received response: {response}") return response + def pre_get_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_get_source(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -232,6 +267,22 @@ def post_list_big_query_exports(self, response): logging.log(f"Received response: {response}") return response + def pre_list_descendant_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + + def pre_list_effective_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + def pre_list_findings(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -256,6 +307,14 @@ def post_list_notification_configs(self, response): logging.log(f"Received response: {response}") return response + def pre_list_security_health_analytics_custom_modules(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_security_health_analytics_custom_modules(self, response): + logging.log(f"Received response: {response}") + return response + def pre_list_sources(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -352,6 +411,14 @@ def post_update_organization_settings(self, response): logging.log(f"Received response: {response}") return response + def pre_update_security_health_analytics_custom_module(self, request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_update_security_health_analytics_custom_module(self, response): + logging.log(f"Received response: {response}") + return response + def pre_update_security_marks(self, request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -496,6 +563,33 @@ def post_create_notification_config( """ return response + def pre_create_security_health_analytics_custom_module( + self, + request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_create_security_health_analytics_custom_module( + self, + response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for create_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_create_source( self, request: securitycenter_service.CreateSourceRequest, @@ -560,6 +654,21 @@ def pre_delete_notification_config( """ return request, metadata + def pre_delete_security_health_analytics_custom_module( + self, + request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for delete_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + def pre_get_big_query_export( self, request: securitycenter_service.GetBigQueryExportRequest, @@ -585,6 +694,33 @@ def post_get_big_query_export( """ return response + def pre_get_effective_security_health_analytics_custom_module( + self, + request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_effective_security_health_analytics_custom_module( + self, + response: effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_effective_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_iam_policy( self, request: iam_policy_pb2.GetIamPolicyRequest, @@ -679,6 +815,33 @@ def post_get_organization_settings( """ return response + def pre_get_security_health_analytics_custom_module( + self, + request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_get_security_health_analytics_custom_module( + self, + response: security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for get_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_get_source( self, request: securitycenter_service.GetSourceRequest, @@ -794,6 +957,60 @@ def post_list_big_query_exports( """ return response + def pre_list_descendant_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_descendant_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_descendant_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + + def pre_list_effective_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_effective_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_effective_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_findings( self, request: securitycenter_service.ListFindingsRequest, @@ -867,6 +1084,33 @@ def post_list_notification_configs( """ return response + def pre_list_security_health_analytics_custom_modules( + self, + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_list_security_health_analytics_custom_modules( + self, + response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + """Post-rpc interceptor for list_security_health_analytics_custom_modules + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_list_sources( self, request: securitycenter_service.ListSourcesRequest, @@ -1151,6 +1395,33 @@ def post_update_organization_settings( """ return response + def pre_update_security_health_analytics_custom_module( + self, + request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + Sequence[Tuple[str, str]], + ]: + """Pre-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityCenter server. + """ + return request, metadata + + def post_update_security_health_analytics_custom_module( + self, + response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + """Post-rpc interceptor for update_security_health_analytics_custom_module + + Override in a subclass to manipulate the response + after it is returned by the SecurityCenter server but before + it is returned to user code. + """ + return response + def pre_update_security_marks( self, request: securitycenter_service.UpdateSecurityMarksRequest, @@ -2001,9 +2272,9 @@ def __call__( resp = self._interceptor.post_create_notification_config(resp) return resp - class _CreateSource(SecurityCenterRestStub): + class _CreateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): def __hash__(self): - return hash("CreateSource") + return hash("CreateSecurityHealthAnalyticsCustomModule") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2017,44 +2288,66 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.CreateSourceRequest, + request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the create security health + analytics custom module method over HTTP. - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + Args: + request (~.securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for creating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ http_options: List[Dict[str, str]] = [ { "method": "post", - "uri": "/v1/{parent=organizations/*}/sources", - "body": "source", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", + }, + { + "method": "post", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", + }, + { + "method": "post", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules", + "body": "security_health_analytics_custom_module", }, ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) + ( + request, + metadata, + ) = self._interceptor.pre_create_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) # Jsonify the request body @@ -2096,16 +2389,24 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) + resp = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) + resp = ( + self._interceptor.post_create_security_health_analytics_custom_module( + resp + ) + ) return resp - class _DeleteBigQueryExport(SecurityCenterRestStub): + class _CreateSource(SecurityCenterRestStub): def __hash__(self): - return hash("DeleteBigQueryExport") + return hash("CreateSource") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2119,18 +2420,120 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.DeleteBigQueryExportRequest, + request: securitycenter_service.CreateSourceRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ): - r"""Call the delete big query export method over HTTP. + ) -> gcs_source.Source: + r"""Call the create source method over HTTP. Args: - request (~.securitycenter_service.DeleteBigQueryExportRequest): - The request object. Request message for deleting a - BigQuery export. + request (~.securitycenter_service.CreateSourceRequest): + The request object. Request message for creating a + source. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_source.Source: + Security Command Center finding + source. A finding source is an entity or + a mechanism that can produce a finding. + A source is like a container of findings + that come from the same scanner, logger, + monitor, and other tools. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/v1/{parent=organizations/*}/sources", + "body": "source", + }, + ] + request, metadata = self._interceptor.pre_create_source(request, metadata) + pb_request = securitycenter_service.CreateSourceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = gcs_source.Source() + pb_resp = gcs_source.Source.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_create_source(resp) + return resp + + class _DeleteBigQueryExport(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteBigQueryExport") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.DeleteBigQueryExportRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ): + r"""Call the delete big query export method over HTTP. + + Args: + request (~.securitycenter_service.DeleteBigQueryExportRequest): + The request object. Request message for deleting a + BigQuery export. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2361,6 +2764,97 @@ def __call__( if response.status_code >= 400: raise core_exceptions.from_http_response(response) + class _DeleteSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("DeleteSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ): + r"""Call the delete security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for deleting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "delete", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "delete", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_delete_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + class _GetBigQueryExport(SecurityCenterRestStub): def __hash__(self): return hash("GetBigQueryExport") @@ -2460,6 +2954,130 @@ def __call__( resp = self._interceptor.post_get_big_query_export(resp) return resp + class _GetEffectiveSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("GetEffectiveSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + r"""Call the get effective security + health analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: + An EffectiveSecurityHealthAnalyticsCustomModule is the + representation of a Security Health Analytics custom + module at a specified level of the resource hierarchy: + organization, folder, or project. If a custom module is + inherited from a parent organization or folder, the + value of the ``enablementState`` property in + EffectiveSecurityHealthAnalyticsCustomModule is set to + the value that is effective in the parent, instead of + ``INHERITED``. For example, if the module is enabled in + a parent organization or folder, the effective + enablement_state for the module in all child folders or + projects is also ``enabled``. + EffectiveSecurityHealthAnalyticsCustomModule is + read-only. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_get_effective_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + pb_resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_effective_security_health_analytics_custom_module( + resp + ) + return resp + class _GetIamPolicy(SecurityCenterRestStub): def __hash__(self): return hash("GetIamPolicy") @@ -2753,9 +3371,112 @@ def __call__( r"""Call the get notification config method over HTTP. Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. + request (~.securitycenter_service.GetNotificationConfigRequest): + The request object. Request message for getting a + notification config. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.notification_config.NotificationConfig: + Cloud Security Command Center (Cloud + SCC) notification configs. + A notification config is a Cloud SCC + resource that contains the configuration + to send notifications for create/update + events of findings, assets and etc. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{name=organizations/*/notificationConfigs/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/notificationConfigs/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/notificationConfigs/*}", + }, + ] + request, metadata = self._interceptor.pre_get_notification_config( + request, metadata + ) + pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = notification_config.NotificationConfig() + pb_resp = notification_config.NotificationConfig.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_notification_config(resp) + return resp + + class _GetOrganizationSettings(SecurityCenterRestStub): + def __hash__(self): + return hash("GetOrganizationSettings") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.GetOrganizationSettingsRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> organization_settings.OrganizationSettings: + r"""Call the get organization settings method over HTTP. + + Args: + request (~.securitycenter_service.GetOrganizationSettingsRequest): + The request object. Request message for getting + organization settings. retry (google.api_core.retry.Retry): Designation of what errors, if any, should be retried. timeout (float): The timeout for this request. @@ -2763,34 +3484,25 @@ def __call__( sent along with the request as metadata. Returns: - ~.notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. + ~.organization_settings.OrganizationSettings: + User specified settings that are + attached to the Security Command Center + organization. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{name=organizations/*/notificationConfigs/*}", - }, - { - "method": "get", - "uri": "/v1/{name=folders/*/notificationConfigs/*}", - }, - { - "method": "get", - "uri": "/v1/{name=projects/*/notificationConfigs/*}", + "uri": "/v1/{name=organizations/*/organizationSettings}", }, ] - request, metadata = self._interceptor.pre_get_notification_config( + request, metadata = self._interceptor.pre_get_organization_settings( request, metadata ) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) + pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) uri = transcoded_request["uri"] @@ -2824,16 +3536,16 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) + resp = organization_settings.OrganizationSettings() + pb_resp = organization_settings.OrganizationSettings.pb(resp) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) + resp = self._interceptor.post_get_organization_settings(resp) return resp - class _GetOrganizationSettings(SecurityCenterRestStub): + class _GetSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): def __hash__(self): - return hash("GetOrganizationSettings") + return hash("GetSecurityHealthAnalyticsCustomModule") __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} @@ -2847,43 +3559,64 @@ def _get_unset_required_fields(cls, message_dict): def __call__( self, - request: securitycenter_service.GetOrganizationSettingsRequest, + request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, *, retry: OptionalRetry = gapic_v1.method.DEFAULT, timeout: Optional[float] = None, metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. + ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the get security health + analytics custom module method over HTTP. - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. + Args: + request (~.securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for getting security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. + Returns: + ~.security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{name=organizations/*/organizationSettings}", + "uri": "/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + }, + { + "method": "get", + "uri": "/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}", }, ] - request, metadata = self._interceptor.pre_get_organization_settings( + ( + request, + metadata, + ) = self._interceptor.pre_get_security_health_analytics_custom_module( request, metadata ) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb( - request + pb_request = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) ) transcoded_request = path_template.transcode(http_options, pb_request) @@ -2918,11 +3651,17 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) + resp = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) + resp = self._interceptor.post_get_security_health_analytics_custom_module( + resp + ) return resp class _GetSource(SecurityCenterRestStub): @@ -3362,31 +4101,251 @@ def __call__( metadata (Sequence[Tuple[str, str]]): Strings which should be sent along with the request as metadata. - Returns: - ~.securitycenter_service.ListBigQueryExportsResponse: - Response message for listing BigQuery - exports. + Returns: + ~.securitycenter_service.ListBigQueryExportsResponse: + Response message for listing BigQuery + exports. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*}/bigQueryExports", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*}/bigQueryExports", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*}/bigQueryExports", + }, + ] + request, metadata = self._interceptor.pre_list_big_query_exports( + request, metadata + ) + pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = securitycenter_service.ListBigQueryExportsResponse() + pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_big_query_exports(resp) + return resp + + class _ListDescendantSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListDescendantSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list descendant security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing + descendant security health analytics + custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + descendant security health analytics + custom modules. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules:listDescendant", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_list_descendant_security_health_analytics_custom_modules( + request, metadata + ) + pb_request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_descendant_security_health_analytics_custom_modules( + resp + ) + return resp + + class _ListEffectiveSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListEffectiveSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list effective security + health analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing effective + security health analytics custom + modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing + effective security health analytics + custom modules. """ http_options: List[Dict[str, str]] = [ { "method": "get", - "uri": "/v1/{parent=organizations/*}/bigQueryExports", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, { "method": "get", - "uri": "/v1/{parent=folders/*}/bigQueryExports", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, { "method": "get", - "uri": "/v1/{parent=projects/*}/bigQueryExports", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/effectiveCustomModules", }, ] - request, metadata = self._interceptor.pre_list_big_query_exports( + ( + request, + metadata, + ) = self._interceptor.pre_list_effective_security_health_analytics_custom_modules( request, metadata ) - pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) + pb_request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) transcoded_request = path_template.transcode(http_options, pb_request) uri = transcoded_request["uri"] @@ -3420,11 +4379,17 @@ def __call__( raise core_exceptions.from_http_response(response) # Return the response - resp = securitycenter_service.ListBigQueryExportsResponse() - pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) + resp = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_big_query_exports(resp) + resp = self._interceptor.post_list_effective_security_health_analytics_custom_modules( + resp + ) return resp class _ListFindings(SecurityCenterRestStub): @@ -3724,6 +4689,117 @@ def __call__( resp = self._interceptor.post_list_notification_configs(resp) return resp + class _ListSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): + def __hash__(self): + return hash("ListSecurityHealthAnalyticsCustomModules") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + r"""Call the list security health + analytics custom modules method over HTTP. + + Args: + request (~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): + The request object. Request message for listing security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: + Response message for listing security + health analytics custom modules. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules", + }, + { + "method": "get", + "uri": "/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules", + }, + { + "method": "get", + "uri": "/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_list_security_health_analytics_custom_modules( + request, metadata + ) + pb_request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + pb_resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_security_health_analytics_custom_modules( + resp + ) + return resp + class _ListSources(SecurityCenterRestStub): def __hash__(self): return hash("ListSources") @@ -5083,6 +6159,138 @@ def __call__( resp = self._interceptor.post_update_organization_settings(resp) return resp + class _UpdateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): + def __hash__(self): + return hash("UpdateSecurityHealthAnalyticsCustomModule") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: Optional[float] = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + r"""Call the update security health + analytics custom module method over HTTP. + + Args: + request (~.securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): + The request object. Request message for updating security + health analytics custom modules. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (float): The timeout for this request. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + + Returns: + ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: + Represents an instance of a Security + Health Analytics custom module, + including its full module name, display + name, enablement state, and last updated + time. You can create a custom module at + the organization, folder, or project + level. Custom modules that you create at + the organization or folder level are + inherited by the child folders and + projects. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=folders/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + { + "method": "patch", + "uri": "/v1/{security_health_analytics_custom_module.name=projects/*/securityHealthAnalyticsSettings/customModules/*}", + "body": "security_health_analytics_custom_module", + }, + ] + ( + request, + metadata, + ) = self._interceptor.pre_update_security_health_analytics_custom_module( + request, metadata + ) + pb_request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=True, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + query_params["$alt"] = "json;enum-encoding=int" + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + resp + ) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = ( + self._interceptor.post_update_security_health_analytics_custom_module( + resp + ) + ) + return resp + class _UpdateSecurityMarks(SecurityCenterRestStub): def __hash__(self): return hash("UpdateSecurityMarks") @@ -5366,6 +6574,17 @@ def create_notification_config( # In C++ this would require a dynamic_cast return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + @property + def create_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._CreateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def create_source( self, @@ -5402,6 +6621,17 @@ def delete_notification_config( # In C++ this would require a dynamic_cast return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore + @property + def delete_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], + empty_pb2.Empty, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._DeleteSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_big_query_export( self, @@ -5413,6 +6643,17 @@ def get_big_query_export( # In C++ this would require a dynamic_cast return self._GetBigQueryExport(self._session, self._host, self._interceptor) # type: ignore + @property + def get_effective_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetEffectiveSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_iam_policy( self, @@ -5453,6 +6694,17 @@ def get_organization_settings( # In C++ this would require a dynamic_cast return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + @property + def get_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def get_source( self, @@ -5505,6 +6757,32 @@ def list_big_query_exports( # In C++ this would require a dynamic_cast return self._ListBigQueryExports(self._session, self._host, self._interceptor) # type: ignore + @property + def list_descendant_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListDescendantSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_effective_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest + ], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListEffectiveSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + @property def list_findings( self, @@ -5538,6 +6816,17 @@ def list_notification_configs( # In C++ this would require a dynamic_cast return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore + @property + def list_security_health_analytics_custom_modules( + self, + ) -> Callable[ + [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore + @property def list_sources( self, @@ -5656,6 +6945,17 @@ def update_organization_settings( # In C++ this would require a dynamic_cast return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore + @property + def update_security_health_analytics_custom_module( + self, + ) -> Callable[ + [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._UpdateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore + @property def update_security_marks( self, diff --git a/google/cloud/securitycenter_v1/types/__init__.py b/google/cloud/securitycenter_v1/types/__init__.py index 5d902c0f..f73d61ae 100644 --- a/google/cloud/securitycenter_v1/types/__init__.py +++ b/google/cloud/securitycenter_v1/types/__init__.py @@ -21,6 +21,9 @@ from .contact_details import Contact, ContactDetails from .container import Container from .database import Database +from .effective_security_health_analytics_custom_module import ( + EffectiveSecurityHealthAnalyticsCustomModule, +) from .exfiltration import ExfilResource, Exfiltration from .external_system import ExternalSystem from .file import File @@ -39,6 +42,8 @@ from .process import EnvironmentVariable, Process from .resource import Resource from .run_asset_discovery_response import RunAssetDiscoveryResponse +from .security_health_analytics_custom_config import CustomConfig +from .security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule from .security_marks import SecurityMarks from .securitycenter_service import ( BulkMuteFindingsRequest, @@ -47,14 +52,18 @@ CreateFindingRequest, CreateMuteConfigRequest, CreateNotificationConfigRequest, + CreateSecurityHealthAnalyticsCustomModuleRequest, CreateSourceRequest, DeleteBigQueryExportRequest, DeleteMuteConfigRequest, DeleteNotificationConfigRequest, + DeleteSecurityHealthAnalyticsCustomModuleRequest, GetBigQueryExportRequest, + GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, GetMuteConfigRequest, GetNotificationConfigRequest, GetOrganizationSettingsRequest, + GetSecurityHealthAnalyticsCustomModuleRequest, GetSourceRequest, GroupAssetsRequest, GroupAssetsResponse, @@ -65,12 +74,18 @@ ListAssetsResponse, ListBigQueryExportsRequest, ListBigQueryExportsResponse, + ListDescendantSecurityHealthAnalyticsCustomModulesRequest, + ListDescendantSecurityHealthAnalyticsCustomModulesResponse, + ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, ListFindingsRequest, ListFindingsResponse, ListMuteConfigsRequest, ListMuteConfigsResponse, ListNotificationConfigsRequest, ListNotificationConfigsResponse, + ListSecurityHealthAnalyticsCustomModulesRequest, + ListSecurityHealthAnalyticsCustomModulesResponse, ListSourcesRequest, ListSourcesResponse, RunAssetDiscoveryRequest, @@ -82,6 +97,7 @@ UpdateMuteConfigRequest, UpdateNotificationConfigRequest, UpdateOrganizationSettingsRequest, + UpdateSecurityHealthAnalyticsCustomModuleRequest, UpdateSecurityMarksRequest, UpdateSourceRequest, ) @@ -100,6 +116,7 @@ "ContactDetails", "Container", "Database", + "EffectiveSecurityHealthAnalyticsCustomModule", "ExfilResource", "Exfiltration", "ExternalSystem", @@ -120,6 +137,8 @@ "Process", "Resource", "RunAssetDiscoveryResponse", + "CustomConfig", + "SecurityHealthAnalyticsCustomModule", "SecurityMarks", "BulkMuteFindingsRequest", "BulkMuteFindingsResponse", @@ -127,14 +146,18 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteBigQueryExportRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", @@ -145,12 +168,18 @@ "ListAssetsResponse", "ListBigQueryExportsRequest", "ListBigQueryExportsResponse", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", "ListFindingsRequest", "ListFindingsResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "RunAssetDiscoveryRequest", @@ -162,6 +191,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSecurityMarksRequest", "UpdateSourceRequest", "Source", diff --git a/google/cloud/securitycenter_v1/types/bigquery_export.py b/google/cloud/securitycenter_v1/types/bigquery_export.py index 563309bc..044f7b7e 100644 --- a/google/cloud/securitycenter_v1/types/bigquery_export.py +++ b/google/cloud/securitycenter_v1/types/bigquery_export.py @@ -74,24 +74,24 @@ class BigQueryExport(proto.Message): BigQuery Dataset unique ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the big query + Output only. The time at which the BigQuery export was created. This field is set by the server and will be ignored if provided on export on creation. update_time (google.protobuf.timestamp_pb2.Timestamp): Output only. The most recent time at which - the big export was updated. This field is set by - the server and will be ignored if provided on - export creation or update. + the BigQuery export was updated. This field is + set by the server and will be ignored if + provided on export creation or update. most_recent_editor (str): Output only. Email address of the user who - last edited the big query export. This field is + last edited the BigQuery export. This field is set by the server and will be ignored if provided on export creation or update. principal (str): Output only. The service account that needs - permission to create table, upload data to the - big query dataset. + permission to create table and upload data to + the BigQuery dataset. """ name: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/contact_details.py b/google/cloud/securitycenter_v1/types/contact_details.py index a7cee6e2..b0f600da 100644 --- a/google/cloud/securitycenter_v1/types/contact_details.py +++ b/google/cloud/securitycenter_v1/types/contact_details.py @@ -44,11 +44,11 @@ class ContactDetails(proto.Message): class Contact(proto.Message): - r"""Representa a single contact's email address + r"""The email address of a contact. Attributes: email (str): - An email address e.g. "person123@company.com". + An email address. For example, "``person123@company.com``". """ email: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/database.py b/google/cloud/securitycenter_v1/types/database.py index bad0e30d..78efc65c 100644 --- a/google/cloud/securitycenter_v1/types/database.py +++ b/google/cloud/securitycenter_v1/types/database.py @@ -34,7 +34,7 @@ class Database(proto.Message): database instance itself. Some database resources may not have the full resource name populated because these resource types are not yet supported by Cloud Asset Inventory (e.g. CloudSQL - databases). In these cases only the display name will be + databases). In these cases only the display name will be provided. Attributes: diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py b/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py similarity index 97% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py rename to google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py index f7120d2c..d82d75b4 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py +++ b/google/cloud/securitycenter_v1/types/effective_security_health_analytics_custom_module.py @@ -21,11 +21,10 @@ from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config - __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'EffectiveSecurityHealthAnalyticsCustomModule', + "EffectiveSecurityHealthAnalyticsCustomModule", }, ) @@ -66,6 +65,7 @@ class EffectiveSecurityHealthAnalyticsCustomModule(proto.Message): contain alphanumeric characters or underscores only. """ + class EnablementState(proto.Enum): r"""The enablement state of the module. diff --git a/google/cloud/securitycenter_v1/types/exfiltration.py b/google/cloud/securitycenter_v1/types/exfiltration.py index d00225d7..8f035aee 100644 --- a/google/cloud/securitycenter_v1/types/exfiltration.py +++ b/google/cloud/securitycenter_v1/types/exfiltration.py @@ -30,7 +30,7 @@ class Exfiltration(proto.Message): r"""Exfiltration represents a data exfiltration attempt of one or - more sources to one or more targets. Sources represent the + more sources to one or more targets. Sources represent the source of data that is exfiltrated, and Targets represents the destination the data was copied to. diff --git a/google/cloud/securitycenter_v1/types/finding.py b/google/cloud/securitycenter_v1/types/finding.py index 0868d24d..4fa96375 100644 --- a/google/cloud/securitycenter_v1/types/finding.py +++ b/google/cloud/securitycenter_v1/types/finding.py @@ -137,7 +137,7 @@ class Finding(proto.Message): https://en.wikipedia.org/wiki/Indicator_of_compromise vulnerability (google.cloud.securitycenter_v1.types.Vulnerability): Represents vulnerability-specific fields like - CVE and CVS scores. CVE stands for Common + CVE and CVSS scores. CVE stands for Common Vulnerabilities and Exposures (https://cve.mitre.org/about/) mute_update_time (google.protobuf.timestamp_pb2.Timestamp): @@ -204,6 +204,10 @@ class Finding(proto.Message): Finding. next_steps (str): Next steps associate to the finding. + module_name (str): + Unique identifier of the module which + generated the finding. Example: + folders/598186756061/securityHealthAnalyticsSettings/customModules/56799441161885 containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): Containers associated with the finding. containers provides information for both @@ -506,6 +510,10 @@ class FindingClass(proto.Enum): proto.STRING, number=40, ) + module_name: str = proto.Field( + proto.STRING, + number=41, + ) containers: MutableSequence[container.Container] = proto.RepeatedField( proto.MESSAGE, number=42, diff --git a/google/cloud/securitycenter_v1/types/indicator.py b/google/cloud/securitycenter_v1/types/indicator.py index 6048ab24..00995e4a 100644 --- a/google/cloud/securitycenter_v1/types/indicator.py +++ b/google/cloud/securitycenter_v1/types/indicator.py @@ -28,16 +28,17 @@ class Indicator(proto.Message): - r"""Represents what's commonly known as an Indicator of compromise (IoC) - in computer forensics. This is an artifact observed on a network or - in an operating system that, with high confidence, indicates a - computer intrusion. Reference: - https://en.wikipedia.org/wiki/Indicator_of_compromise + r"""Represents what's commonly known as an *indicator of compromise* + (IoC) in computer forensics. This is an artifact observed on a + network or in an operating system that, with high confidence, + indicates a computer intrusion. For more information, see `Indicator + of + compromise `__. Attributes: ip_addresses (MutableSequence[str]): - List of ip addresses associated to the - Finding. + The list of IP addresses that are associated + with the finding. domains (MutableSequence[str]): List of domains associated to the Finding. signatures (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature]): diff --git a/google/cloud/securitycenter_v1/types/kernel_rootkit.py b/google/cloud/securitycenter_v1/types/kernel_rootkit.py index 62980f75..42c02948 100644 --- a/google/cloud/securitycenter_v1/types/kernel_rootkit.py +++ b/google/cloud/securitycenter_v1/types/kernel_rootkit.py @@ -34,35 +34,36 @@ class KernelRootkit(proto.Message): name (str): Rootkit name when available. unexpected_code_modification (bool): - True if unexpected modifications of kernel + True when unexpected modifications of kernel code memory are present. unexpected_read_only_data_modification (bool): - True if unexpected modifications of kernel + True when unexpected modifications of kernel read-only data memory are present. unexpected_ftrace_handler (bool): - True if ``ftrace`` points are present with callbacks + True when ``ftrace`` points are present with callbacks pointing to regions that are not in the expected kernel or module code range. unexpected_kprobe_handler (bool): - True if ``kprobe`` points are present with callbacks + True when ``kprobe`` points are present with callbacks pointing to regions that are not in the expected kernel or module code range. unexpected_kernel_code_pages (bool): - True if kernel code pages that are not in the - expected kernel or module code regions are + True when kernel code pages that are not in + the expected kernel or module code regions are present. unexpected_system_call_handler (bool): - True if system call handlers that are are not - in the expected kernel or module code regions - are present. + True when system call handlers that are are + not in the expected kernel or module code + regions are present. unexpected_interrupt_handler (bool): - True if interrupt handlers that are are not + True when interrupt handlers that are are not in the expected kernel or module code regions are present. unexpected_processes_in_runqueue (bool): - True if unexpected processes in the scheduler - run queue are present. Such processes are in the - run queue, but not in the process task list. + True when unexpected processes in the + scheduler run queue are present. Such processes + are in the run queue, but not in the process + task list. """ name: str = proto.Field( diff --git a/google/cloud/securitycenter_v1/types/kubernetes.py b/google/cloud/securitycenter_v1/types/kubernetes.py index e0406a6b..ac0b4bec 100644 --- a/google/cloud/securitycenter_v1/types/kubernetes.py +++ b/google/cloud/securitycenter_v1/types/kubernetes.py @@ -30,7 +30,7 @@ class Kubernetes(proto.Message): - r"""Kubernetes related attributes. + r"""Kubernetes-related attributes. Attributes: pods (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Pod]): @@ -178,8 +178,9 @@ class Binding(proto.Message): The Role or ClusterRole referenced by the binding. subjects (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Subject]): - Represents the subjects(s) bound to the role. - Not always available for PATCH requests. + Represents one or more subjects that are + bound to the role. Not always available for + PATCH requests. """ ns: str = proto.Field( diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py similarity index 95% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py rename to google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py index 4f885a80..8cbe610c 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py +++ b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_config.py @@ -17,15 +17,13 @@ from typing import MutableMapping, MutableSequence -import proto # type: ignore - from google.type import expr_pb2 # type: ignore - +import proto # type: ignore __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'CustomConfig', + "CustomConfig", }, ) @@ -63,6 +61,7 @@ class CustomConfig(proto.Message): returned with each finding generated by this module in the ``nextSteps`` property of the finding JSON. """ + class Severity(proto.Enum): r"""Defines the valid value options for the severity of a finding. @@ -121,10 +120,12 @@ class Property(proto.Message): message=expr_pb2.Expr, ) - properties: MutableSequence['CustomConfig.CustomOutputSpec.Property'] = proto.RepeatedField( + properties: MutableSequence[ + "CustomConfig.CustomOutputSpec.Property" + ] = proto.RepeatedField( proto.MESSAGE, number=1, - message='CustomConfig.CustomOutputSpec.Property', + message="CustomConfig.CustomOutputSpec.Property", ) class ResourceSelector(proto.Message): diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py similarity index 98% rename from owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py rename to google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py index 57bb086f..1a40c286 100644 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py +++ b/google/cloud/securitycenter_v1/types/security_health_analytics_custom_module.py @@ -17,16 +17,15 @@ from typing import MutableMapping, MutableSequence +from google.protobuf import timestamp_pb2 # type: ignore import proto # type: ignore from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.protobuf import timestamp_pb2 # type: ignore - __protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', + package="google.cloud.securitycenter.v1", manifest={ - 'SecurityHealthAnalyticsCustomModule', + "SecurityHealthAnalyticsCustomModule", }, ) @@ -78,6 +77,7 @@ class SecurityHealthAnalyticsCustomModule(proto.Message): The user specified custom configuration for the module. """ + class EnablementState(proto.Enum): r"""Possible enablement states of a custom module. diff --git a/google/cloud/securitycenter_v1/types/securitycenter_service.py b/google/cloud/securitycenter_v1/types/securitycenter_service.py index 04856162..7fc55cff 100644 --- a/google/cloud/securitycenter_v1/types/securitycenter_service.py +++ b/google/cloud/securitycenter_v1/types/securitycenter_service.py @@ -23,6 +23,10 @@ from google.protobuf import timestamp_pb2 # type: ignore import proto # type: ignore +from google.cloud.securitycenter_v1.types import ( + bigquery_export, + effective_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -30,9 +34,11 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import asset as gcs_asset -from google.cloud.securitycenter_v1.types import bigquery_export from google.cloud.securitycenter_v1.types import finding as gcs_finding from google.cloud.securitycenter_v1.types import folder from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config @@ -46,23 +52,33 @@ "CreateFindingRequest", "CreateMuteConfigRequest", "CreateNotificationConfigRequest", + "CreateSecurityHealthAnalyticsCustomModuleRequest", "CreateSourceRequest", "DeleteMuteConfigRequest", "DeleteNotificationConfigRequest", + "DeleteSecurityHealthAnalyticsCustomModuleRequest", "GetBigQueryExportRequest", "GetMuteConfigRequest", "GetNotificationConfigRequest", "GetOrganizationSettingsRequest", + "GetEffectiveSecurityHealthAnalyticsCustomModuleRequest", + "GetSecurityHealthAnalyticsCustomModuleRequest", "GetSourceRequest", "GroupAssetsRequest", "GroupAssetsResponse", "GroupFindingsRequest", "GroupFindingsResponse", "GroupResult", + "ListDescendantSecurityHealthAnalyticsCustomModulesRequest", + "ListDescendantSecurityHealthAnalyticsCustomModulesResponse", "ListMuteConfigsRequest", "ListMuteConfigsResponse", "ListNotificationConfigsRequest", "ListNotificationConfigsResponse", + "ListEffectiveSecurityHealthAnalyticsCustomModulesRequest", + "ListEffectiveSecurityHealthAnalyticsCustomModulesResponse", + "ListSecurityHealthAnalyticsCustomModulesRequest", + "ListSecurityHealthAnalyticsCustomModulesResponse", "ListSourcesRequest", "ListSourcesResponse", "ListAssetsRequest", @@ -77,6 +93,7 @@ "UpdateMuteConfigRequest", "UpdateNotificationConfigRequest", "UpdateOrganizationSettingsRequest", + "UpdateSecurityHealthAnalyticsCustomModuleRequest", "UpdateSourceRequest", "UpdateSecurityMarksRequest", "CreateBigQueryExportRequest", @@ -254,6 +271,36 @@ class CreateNotificationConfigRequest(proto.Message): ) +class CreateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for creating security health analytics custom + modules. + + Attributes: + parent (str): + Required. Resource name of the new custom + module's parent. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. SecurityHealthAnalytics custom + module to create. The provided name is ignored + and reset with provided parent information and + server-generated ID. + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=2, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + + class CreateSourceRequest(proto.Message): r"""Request message for creating a source. @@ -313,6 +360,26 @@ class DeleteNotificationConfigRequest(proto.Message): ) +class DeleteSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for deleting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to + delete. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class GetBigQueryExportRequest(proto.Message): r"""Request message for retrieving a BigQuery export. @@ -382,6 +449,46 @@ class GetOrganizationSettingsRequest(proto.Message): ) +class GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting effective security health + analytics custom modules. + + Attributes: + name (str): + Required. Name of the effective custom module + to get. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + +class GetSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for getting security health analytics custom + modules. + + Attributes: + name (str): + Required. Name of the custom module to get. + Its format is + "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", + "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", + or + "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". + """ + + name: str = proto.Field( + proto.STRING, + number=1, + ) + + class GetSourceRequest(proto.Message): r"""Request message for getting a source. @@ -895,6 +1002,71 @@ class GroupResult(proto.Message): ) +class ListDescendantSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing descendant security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list descendant + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListDescendantSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing descendant security health + analytics custom modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent and its descendants. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + class ListMuteConfigsRequest(proto.Message): r"""Request message for listing mute configs at a given scope e.g. organization, folder or project. @@ -1023,6 +1195,136 @@ def raw_page(self): ) +class ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing effective security health + analytics custom modules. + + Attributes: + parent (str): + Required. Name of parent to list effective + custom modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListEffectiveSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing effective security health + analytics custom modules. + + Attributes: + effective_security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule]): + Effective custom modules belonging to the + requested parent. + next_page_token (str): + If not empty, indicates that there may be + more effective custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + effective_security_health_analytics_custom_modules: MutableSequence[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + +class ListSecurityHealthAnalyticsCustomModulesRequest(proto.Message): + r"""Request message for listing security health analytics custom + modules. + + Attributes: + parent (str): + Required. Name of parent to list custom + modules. Its format is + "organizations/{organization}/securityHealthAnalyticsSettings", + "folders/{folder}/securityHealthAnalyticsSettings", + or + "projects/{project}/securityHealthAnalyticsSettings". + page_size (int): + The maximum number of results to return in a + single response. Default is 10, minimum is 1, + maximum is 1000. + page_token (str): + The value returned by the last call + indicating a continuation + """ + + parent: str = proto.Field( + proto.STRING, + number=1, + ) + page_size: int = proto.Field( + proto.INT32, + number=2, + ) + page_token: str = proto.Field( + proto.STRING, + number=3, + ) + + +class ListSecurityHealthAnalyticsCustomModulesResponse(proto.Message): + r"""Response message for listing security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): + Custom modules belonging to the requested + parent. + next_page_token (str): + If not empty, indicates that there may be + more custom modules to be returned. + """ + + @property + def raw_page(self): + return self + + security_health_analytics_custom_modules: MutableSequence[ + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule + ] = proto.RepeatedField( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + next_page_token: str = proto.Field( + proto.STRING, + number=2, + ) + + class ListSourcesRequest(proto.Message): r"""Request message for listing sources. @@ -1942,6 +2244,30 @@ class UpdateOrganizationSettingsRequest(proto.Message): ) +class UpdateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): + r"""Request message for updating security health analytics custom + modules. + + Attributes: + security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): + Required. The SecurityHealthAnalytics custom + module to update. + update_mask (google.protobuf.field_mask_pb2.FieldMask): + The list of fields to update. + """ + + security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( + proto.MESSAGE, + number=1, + message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + update_mask: field_mask_pb2.FieldMask = proto.Field( + proto.MESSAGE, + number=2, + message=field_mask_pb2.FieldMask, + ) + + class UpdateSourceRequest(proto.Message): r"""Request message for updating a source. diff --git a/owl-bot-staging/v1/.coveragerc b/owl-bot-staging/v1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1/.flake8 b/owl-bot-staging/v1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1/MANIFEST.in b/owl-bot-staging/v1/MANIFEST.in deleted file mode 100644 index a18e3d0b..00000000 --- a/owl-bot-staging/v1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1 *.py diff --git a/owl-bot-staging/v1/README.rst b/owl-bot-staging/v1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1/docs/conf.py b/owl-bot-staging/v1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1/docs/index.rst b/owl-bot-staging/v1/docs/index.rst deleted file mode 100644 index 47fc2db7..00000000 --- a/owl-bot-staging/v1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1/services - securitycenter_v1/types diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst b/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst deleted file mode 100644 index bc6175c8..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/services.rst b/owl-bot-staging/v1/docs/securitycenter_v1/services.rst deleted file mode 100644 index 295acede..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1 API -=============================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1/docs/securitycenter_v1/types.rst b/owl-bot-staging/v1/docs/securitycenter_v1/types.rst deleted file mode 100644 index f7497757..00000000 --- a/owl-bot-staging/v1/docs/securitycenter_v1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1 API -============================================ - -.. automodule:: google.cloud.securitycenter_v1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index e268aa1f..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,215 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1.types.access import Access -from google.cloud.securitycenter_v1.types.access import Geolocation -from google.cloud.securitycenter_v1.types.access import ServiceAccountDelegationInfo -from google.cloud.securitycenter_v1.types.asset import Asset -from google.cloud.securitycenter_v1.types.bigquery_export import BigQueryExport -from google.cloud.securitycenter_v1.types.compliance import Compliance -from google.cloud.securitycenter_v1.types.connection import Connection -from google.cloud.securitycenter_v1.types.contact_details import Contact -from google.cloud.securitycenter_v1.types.contact_details import ContactDetails -from google.cloud.securitycenter_v1.types.container import Container -from google.cloud.securitycenter_v1.types.database import Database -from google.cloud.securitycenter_v1.types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule -from google.cloud.securitycenter_v1.types.exfiltration import ExfilResource -from google.cloud.securitycenter_v1.types.exfiltration import Exfiltration -from google.cloud.securitycenter_v1.types.external_system import ExternalSystem -from google.cloud.securitycenter_v1.types.file import File -from google.cloud.securitycenter_v1.types.finding import Finding -from google.cloud.securitycenter_v1.types.folder import Folder -from google.cloud.securitycenter_v1.types.iam_binding import IamBinding -from google.cloud.securitycenter_v1.types.indicator import Indicator -from google.cloud.securitycenter_v1.types.kernel_rootkit import KernelRootkit -from google.cloud.securitycenter_v1.types.kubernetes import Kubernetes -from google.cloud.securitycenter_v1.types.label import Label -from google.cloud.securitycenter_v1.types.mitre_attack import MitreAttack -from google.cloud.securitycenter_v1.types.mute_config import MuteConfig -from google.cloud.securitycenter_v1.types.notification_config import NotificationConfig -from google.cloud.securitycenter_v1.types.notification_message import NotificationMessage -from google.cloud.securitycenter_v1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1.types.process import EnvironmentVariable -from google.cloud.securitycenter_v1.types.process import Process -from google.cloud.securitycenter_v1.types.resource import Resource -from google.cloud.securitycenter_v1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1.types.security_health_analytics_custom_config import CustomConfig -from google.cloud.securitycenter_v1.types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule -from google.cloud.securitycenter_v1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import BulkMuteFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListBigQueryExportsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListMuteConfigsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListNotificationConfigsResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import SetMuteRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateBigQueryExportRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateExternalSystemRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateMuteConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateNotificationConfigRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1.types.source import Source -from google.cloud.securitycenter_v1.types.vulnerability import Cve -from google.cloud.securitycenter_v1.types.vulnerability import Cvssv3 -from google.cloud.securitycenter_v1.types.vulnerability import Reference -from google.cloud.securitycenter_v1.types.vulnerability import Vulnerability - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Access', - 'Geolocation', - 'ServiceAccountDelegationInfo', - 'Asset', - 'BigQueryExport', - 'Compliance', - 'Connection', - 'Contact', - 'ContactDetails', - 'Container', - 'Database', - 'EffectiveSecurityHealthAnalyticsCustomModule', - 'ExfilResource', - 'Exfiltration', - 'ExternalSystem', - 'File', - 'Finding', - 'Folder', - 'IamBinding', - 'Indicator', - 'KernelRootkit', - 'Kubernetes', - 'Label', - 'MitreAttack', - 'MuteConfig', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'EnvironmentVariable', - 'Process', - 'Resource', - 'RunAssetDiscoveryResponse', - 'CustomConfig', - 'SecurityHealthAnalyticsCustomModule', - 'SecurityMarks', - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateBigQueryExportRequest', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteBigQueryExportRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'UpdateBigQueryExportRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', - 'Cve', - 'Cvssv3', - 'Reference', - 'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py deleted file mode 100644 index 2f444fb5..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.access import Access -from .types.access import Geolocation -from .types.access import ServiceAccountDelegationInfo -from .types.asset import Asset -from .types.bigquery_export import BigQueryExport -from .types.compliance import Compliance -from .types.connection import Connection -from .types.contact_details import Contact -from .types.contact_details import ContactDetails -from .types.container import Container -from .types.database import Database -from .types.effective_security_health_analytics_custom_module import EffectiveSecurityHealthAnalyticsCustomModule -from .types.exfiltration import ExfilResource -from .types.exfiltration import Exfiltration -from .types.external_system import ExternalSystem -from .types.file import File -from .types.finding import Finding -from .types.folder import Folder -from .types.iam_binding import IamBinding -from .types.indicator import Indicator -from .types.kernel_rootkit import KernelRootkit -from .types.kubernetes import Kubernetes -from .types.label import Label -from .types.mitre_attack import MitreAttack -from .types.mute_config import MuteConfig -from .types.notification_config import NotificationConfig -from .types.notification_message import NotificationMessage -from .types.organization_settings import OrganizationSettings -from .types.process import EnvironmentVariable -from .types.process import Process -from .types.resource import Resource -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_health_analytics_custom_config import CustomConfig -from .types.security_health_analytics_custom_module import SecurityHealthAnalyticsCustomModule -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import BulkMuteFindingsRequest -from .types.securitycenter_service import BulkMuteFindingsResponse -from .types.securitycenter_service import CreateBigQueryExportRequest -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateMuteConfigRequest -from .types.securitycenter_service import CreateNotificationConfigRequest -from .types.securitycenter_service import CreateSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import DeleteBigQueryExportRequest -from .types.securitycenter_service import DeleteMuteConfigRequest -from .types.securitycenter_service import DeleteNotificationConfigRequest -from .types.securitycenter_service import DeleteSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetBigQueryExportRequest -from .types.securitycenter_service import GetEffectiveSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetMuteConfigRequest -from .types.securitycenter_service import GetNotificationConfigRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListBigQueryExportsRequest -from .types.securitycenter_service import ListBigQueryExportsResponse -from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListDescendantSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListEffectiveSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListMuteConfigsRequest -from .types.securitycenter_service import ListMuteConfigsResponse -from .types.securitycenter_service import ListNotificationConfigsRequest -from .types.securitycenter_service import ListNotificationConfigsResponse -from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesRequest -from .types.securitycenter_service import ListSecurityHealthAnalyticsCustomModulesResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import SetMuteRequest -from .types.securitycenter_service import UpdateBigQueryExportRequest -from .types.securitycenter_service import UpdateExternalSystemRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateMuteConfigRequest -from .types.securitycenter_service import UpdateNotificationConfigRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityHealthAnalyticsCustomModuleRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source -from .types.vulnerability import Cve -from .types.vulnerability import Cvssv3 -from .types.vulnerability import Reference -from .types.vulnerability import Vulnerability - -__all__ = ( - 'SecurityCenterAsyncClient', -'Access', -'Asset', -'BigQueryExport', -'BulkMuteFindingsRequest', -'BulkMuteFindingsResponse', -'Compliance', -'Connection', -'Contact', -'ContactDetails', -'Container', -'CreateBigQueryExportRequest', -'CreateFindingRequest', -'CreateMuteConfigRequest', -'CreateNotificationConfigRequest', -'CreateSecurityHealthAnalyticsCustomModuleRequest', -'CreateSourceRequest', -'CustomConfig', -'Cve', -'Cvssv3', -'Database', -'DeleteBigQueryExportRequest', -'DeleteMuteConfigRequest', -'DeleteNotificationConfigRequest', -'DeleteSecurityHealthAnalyticsCustomModuleRequest', -'EffectiveSecurityHealthAnalyticsCustomModule', -'EnvironmentVariable', -'ExfilResource', -'Exfiltration', -'ExternalSystem', -'File', -'Finding', -'Folder', -'Geolocation', -'GetBigQueryExportRequest', -'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', -'GetMuteConfigRequest', -'GetNotificationConfigRequest', -'GetOrganizationSettingsRequest', -'GetSecurityHealthAnalyticsCustomModuleRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'IamBinding', -'Indicator', -'KernelRootkit', -'Kubernetes', -'Label', -'ListAssetsRequest', -'ListAssetsResponse', -'ListBigQueryExportsRequest', -'ListBigQueryExportsResponse', -'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', -'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', -'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', -'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListMuteConfigsRequest', -'ListMuteConfigsResponse', -'ListNotificationConfigsRequest', -'ListNotificationConfigsResponse', -'ListSecurityHealthAnalyticsCustomModulesRequest', -'ListSecurityHealthAnalyticsCustomModulesResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'MitreAttack', -'MuteConfig', -'NotificationConfig', -'NotificationMessage', -'OrganizationSettings', -'Process', -'Reference', -'Resource', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityHealthAnalyticsCustomModule', -'SecurityMarks', -'ServiceAccountDelegationInfo', -'SetFindingStateRequest', -'SetMuteRequest', -'Source', -'UpdateBigQueryExportRequest', -'UpdateExternalSystemRequest', -'UpdateFindingRequest', -'UpdateMuteConfigRequest', -'UpdateNotificationConfigRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityHealthAnalyticsCustomModuleRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json deleted file mode 100644 index 5c23812a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_metadata.json +++ /dev/null @@ -1,688 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1", - "protoPackage": "google.cloud.securitycenter.v1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "BulkMuteFindings": { - "methods": [ - "bulk_mute_findings" - ] - }, - "CreateBigQueryExport": { - "methods": [ - "create_big_query_export" - ] - }, - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateMuteConfig": { - "methods": [ - "create_mute_config" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "create_security_health_analytics_custom_module" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteBigQueryExport": { - "methods": [ - "delete_big_query_export" - ] - }, - "DeleteMuteConfig": { - "methods": [ - "delete_mute_config" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "DeleteSecurityHealthAnalyticsCustomModule": { - "methods": [ - "delete_security_health_analytics_custom_module" - ] - }, - "GetBigQueryExport": { - "methods": [ - "get_big_query_export" - ] - }, - "GetEffectiveSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_effective_security_health_analytics_custom_module" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetMuteConfig": { - "methods": [ - "get_mute_config" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSecurityHealthAnalyticsCustomModule": { - "methods": [ - "get_security_health_analytics_custom_module" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListBigQueryExports": { - "methods": [ - "list_big_query_exports" - ] - }, - "ListDescendantSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_descendant_security_health_analytics_custom_modules" - ] - }, - "ListEffectiveSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_effective_security_health_analytics_custom_modules" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListMuteConfigs": { - "methods": [ - "list_mute_configs" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSecurityHealthAnalyticsCustomModules": { - "methods": [ - "list_security_health_analytics_custom_modules" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "SetMute": { - "methods": [ - "set_mute" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateBigQueryExport": { - "methods": [ - "update_big_query_export" - ] - }, - "UpdateExternalSystem": { - "methods": [ - "update_external_system" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateMuteConfig": { - "methods": [ - "update_mute_config" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityHealthAnalyticsCustomModule": { - "methods": [ - "update_security_health_analytics_custom_module" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed b/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py deleted file mode 100644 index 4b546e85..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/async_client.py +++ /dev/null @@ -1,5701 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1 APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - big_query_export_path = staticmethod(SecurityCenterClient.big_query_export_path) - parse_big_query_export_path = staticmethod(SecurityCenterClient.parse_big_query_export_path) - effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.effective_security_health_analytics_custom_module_path) - parse_effective_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path) - external_system_path = staticmethod(SecurityCenterClient.external_system_path) - parse_external_system_path = staticmethod(SecurityCenterClient.parse_external_system_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - mute_config_path = staticmethod(SecurityCenterClient.mute_config_path) - parse_mute_config_path = staticmethod(SecurityCenterClient.parse_mute_config_path) - notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) - parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.security_health_analytics_custom_module_path) - parse_security_health_analytics_custom_module_path = staticmethod(SecurityCenterClient.parse_security_health_analytics_custom_module_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - topic_path = staticmethod(SecurityCenterClient.topic_path) - parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def bulk_mute_findings(self, - request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]]): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - parent (:class:`str`): - Required. The parent, at which bulk action needs to be - applied. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` - The response to a BulkMute request. Contains the LRO - information. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.BulkMuteFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.bulk_mute_findings, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - securitycenter_service.BulkMuteFindingsResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def create_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - parent: Optional[str] = None, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for creating security - health analytics custom modules. - parent (:class:`str`): - Required. Resource name of the new - custom module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): - Required. SecurityHealthAnalytics - custom module to create. The provided - name is ignored and reset with provided - parent information and server-generated - ID. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, security_health_analytics_custom_module]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_mute_config(self, - request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - mute_config_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Creates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = await client.create_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]]): - The request object. Request message for creating a mute - config. - parent (:class:`str`): - Required. Resource name of the new mute configs's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): - Required. The mute config being - created. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``mute_config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, mute_config, mute_config_id]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if mute_config is not None: - request.mute_config = mute_config - if mute_config_id is not None: - request.mute_config_id = mute_config_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]]): - The request object. Request message for creating a - notification config. - parent (:class:`str`): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (:class:`str`): - Required. - Unique identifier provided by the client - within the parent scope. It must be - between 1 and 128 characters and contain - alphanumeric characters, underscores, or - hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_mute_config(self, - request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_mute_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]]): - The request object. Request message for deleting a mute - config. - name (:class:`str`): - Required. Name of the mute config to delete. Its format - is organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]]): - The request object. Request message for deleting a - notification config. - name (:class:`str`): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def delete_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - await client.delete_security_health_analytics_custom_module(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for deleting security - health analytics custom modules. - name (:class:`str`): - Required. Name of the custom module - to delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def get_big_query_export(self, - request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Gets a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = await client.get_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]]): - The request object. Request message for retrieving a - BigQuery export. - name (:class:`str`): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_mute_config(self, - request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> mute_config.MuteConfig: - r"""Gets a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]]): - The request object. Request message for retrieving a mute - config. - name (:class:`str`): - Required. Name of the mute config to retrieve. Its - format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]]): - The request object. Request message for getting a - notification config. - name (:class:`str`): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_effective_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_effective_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = await client.get_effective_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for getting effective - security health analytics custom - modules. - name (:class:`str`): - Required. Name of the effective - custom module to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the representation of - a Security Health Analytics custom module at a - specified level of the resource hierarchy: - organization, folder, or project. If a custom module - is inherited from a parent organization or folder, - the value of the enablementState property in - EffectiveSecurityHealthAnalyticsCustomModule is set - to the value that is effective in the parent, instead - of INHERITED. For example, if the module is enabled - in a parent organization or folder, the effective - enablement_state for the module in all child folders - or projects is also enabled. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_effective_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Retrieves a SecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = await client.get_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for getting security - health analytics custom modules. - name (:class:`str`): - Required. Name of the custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_descendant_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_descendant_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing - descendant security health analytics - custom modules. - parent (:class:`str`): - Required. Name of parent to list - descendant custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing - descendant security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_descendant_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_mute_configs(self, - request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsAsyncPager: - r"""Lists mute configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - parent (:class:`str`): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager: - Response message for listing mute - configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListMuteConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_mute_configs, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListMuteConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. - parent (:class:`str`): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListNotificationConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_effective_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_effective_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_effective_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing effective - security health analytics custom - modules. - parent (:class:`str`): - Required. Name of parent to list - effective custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing - effective security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_effective_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: - r"""Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_security_health_analytics_custom_modules(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]]): - The request object. Request message for listing security - health analytics custom modules. - parent (:class:`str`): - Required. Name of parent to list - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager: - Response message for listing security - health analytics custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_mute(self, - request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, - *, - name: Optional[str] = None, - mute: Optional[finding.Finding.Mute] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the mute state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = await client.set_mute(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]]): - The request object. Request message for updating a - finding's mute status. - name (:class:`str`): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute (:class:`google.cloud.securitycenter_v1.types.Finding.Mute`): - Required. The desired state of the - Mute. - - This corresponds to the ``mute`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, mute]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetMuteRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if mute is not None: - request.mute = mute - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_mute, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_external_system(self, - request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, - *, - external_system: Optional[gcs_external_system.ExternalSystem] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_external_system.ExternalSystem: - r"""Updates external system. This is for a given finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = await client.update_external_system(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]]): - The request object. Request message for updating a - ExternalSystem resource. - external_system (:class:`google.cloud.securitycenter_v1.types.ExternalSystem`): - Required. The external system - resource to update. - - This corresponds to the ``external_system`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the external system resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([external_system, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateExternalSystemRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if external_system is not None: - request.external_system = external_system - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_external_system, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("external_system.name", request.external_system.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_mute_config(self, - request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, - *, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Updates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = await client.update_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]]): - The request object. Request message for updating a mute - config. - mute_config (:class:`google.cloud.securitycenter_v1.types.MuteConfig`): - Required. The mute config being - updated. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([mute_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateMuteConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if mute_config is not None: - request.mute_config = mute_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_mute_config, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("mute_config.name", request.mute_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]]): - The request object. Request message for updating a - notification config. - notification_config (:class:`google.cloud.securitycenter_v1.types.NotificationConfig`): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( - ) - - # Make the request - response = await client.update_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]]): - The request object. Request message for updating security - health analytics custom modules. - security_health_analytics_custom_module (:class:`google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule`): - Required. The SecurityHealthAnalytics - custom module to update. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to update. - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_health_analytics_custom_module, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_big_query_export(self, - request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, - *, - parent: Optional[str] = None, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - big_query_export_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Creates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = await client.create_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]]): - The request object. Request message for creating a - BigQuery export. - parent (:class:`str`): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): - Required. The BigQuery export being - created. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``big_query_export_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, big_query_export, big_query_export_id]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if big_query_export is not None: - request.big_query_export = big_query_export - if big_query_export_id is not None: - request.big_query_export_id = big_query_export_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_big_query_export(self, - request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - await client.delete_big_query_export(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]]): - The request object. Request message for deleting a - BigQuery export. - name (:class:`str`): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def update_big_query_export(self, - request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, - *, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Updates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = await client.update_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]]): - The request object. Request message for updating a - BigQuery export. - big_query_export (:class:`google.cloud.securitycenter_v1.types.BigQueryExport`): - Required. The BigQuery export being - updated. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([big_query_export, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateBigQueryExportRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if big_query_export is not None: - request.big_query_export = big_query_export - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_big_query_export, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("big_query_export.name", request.big_query_export.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_big_query_exports(self, - request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListBigQueryExportsAsyncPager: - r"""Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - async def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]]): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - parent (:class:`str`): - Required. The parent, which owns the collection of - BigQuery exports. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager: - Response message for listing BigQuery - exports. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListBigQueryExportsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_big_query_exports, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListBigQueryExportsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_operations( - self, - request: Optional[operations_pb2.ListOperationsRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.ListOperationsResponse: - r"""Lists operations that match the specified filter in the request. - - Args: - request (:class:`~.operations_pb2.ListOperationsRequest`): - The request object. Request message for - `ListOperations` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.ListOperationsResponse: - Response message for ``ListOperations`` method. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.ListOperationsRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.list_operations, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = await rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - async def get_operation( - self, - request: Optional[operations_pb2.GetOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.Operation: - r"""Gets the latest state of a long-running operation. - - Args: - request (:class:`~.operations_pb2.GetOperationRequest`): - The request object. Request message for - `GetOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.Operation: - An ``Operation`` object. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.GetOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.get_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = await rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - async def delete_operation( - self, - request: Optional[operations_pb2.DeleteOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a long-running operation. - - This method indicates that the client is no longer interested - in the operation result. It does not cancel the operation. - If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.DeleteOperationRequest`): - The request object. Request message for - `DeleteOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.DeleteOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.delete_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - async def cancel_operation( - self, - request: Optional[operations_pb2.CancelOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Starts asynchronous cancellation on a long-running operation. - - The server makes a best effort to cancel the operation, but success - is not guaranteed. If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.CancelOperationRequest`): - The request object. Request message for - `CancelOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.CancelOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._client._transport.cancel_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - await rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py deleted file mode 100644 index 68222d1a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/client.py +++ /dev/null @@ -1,5894 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1 APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def big_query_export_path(organization: str,export: str,) -> str: - """Returns a fully-qualified big_query_export string.""" - return "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) - - @staticmethod - def parse_big_query_export_path(path: str) -> Dict[str,str]: - """Parses a big_query_export path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/bigQueryExports/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def effective_security_health_analytics_custom_module_path(organization: str,effective_custom_module: str,) -> str: - """Returns a fully-qualified effective_security_health_analytics_custom_module string.""" - return "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) - - @staticmethod - def parse_effective_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: - """Parses a effective_security_health_analytics_custom_module path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/effectiveCustomModules/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def external_system_path(organization: str,source: str,finding: str,externalsystem: str,) -> str: - """Returns a fully-qualified external_system string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) - - @staticmethod - def parse_external_system_path(path: str) -> Dict[str,str]: - """Parses a external_system path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)/externalSystems/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def mute_config_path(organization: str,mute_config: str,) -> str: - """Returns a fully-qualified mute_config string.""" - return "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) - - @staticmethod - def parse_mute_config_path(path: str) -> Dict[str,str]: - """Parses a mute_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/muteConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def notification_config_path(organization: str,notification_config: str,) -> str: - """Returns a fully-qualified notification_config string.""" - return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - - @staticmethod - def parse_notification_config_path(path: str) -> Dict[str,str]: - """Parses a notification_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_health_analytics_custom_module_path(organization: str,custom_module: str,) -> str: - """Returns a fully-qualified security_health_analytics_custom_module string.""" - return "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) - - @staticmethod - def parse_security_health_analytics_custom_module_path(path: str) -> Dict[str,str]: - """Parses a security_health_analytics_custom_module path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/securityHealthAnalyticsSettings/customModules/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def topic_path(project: str,topic: str,) -> str: - """Returns a fully-qualified topic string.""" - return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - - @staticmethod - def parse_topic_path(path: str) -> Dict[str,str]: - """Parses a topic path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def bulk_mute_findings(self, - request: Optional[Union[securitycenter_service.BulkMuteFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest, dict]): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - parent (str): - Required. The parent, at which bulk action needs to be - applied. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.BulkMuteFindingsResponse` - The response to a BulkMute request. Contains the LRO - information. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.BulkMuteFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.BulkMuteFindingsRequest): - request = securitycenter_service.BulkMuteFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.bulk_mute_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - securitycenter_service.BulkMuteFindingsResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def create_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - parent: Optional[str] = None, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSecurityHealthAnalyticsCustomModuleRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for creating security - health analytics custom modules. - parent (str): - Required. Resource name of the new - custom module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. SecurityHealthAnalytics - custom module to create. The provided - name is ignored and reset with provided - parent information and server-generated - ID. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, security_health_analytics_custom_module]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_mute_config(self, - request: Optional[Union[securitycenter_service.CreateMuteConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - mute_config_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Creates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = client.create_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateMuteConfigRequest, dict]): - The request object. Request message for creating a mute - config. - parent (str): - Required. Resource name of the new mute configs's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being - created. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute_config_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``mute_config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, mute_config, mute_config_id]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateMuteConfigRequest): - request = securitycenter_service.CreateMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if mute_config is not None: - request.mute_config = mute_config - if mute_config_id is not None: - request.mute_config_id = mute_config_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest, dict]): - The request object. Request message for creating a - notification config. - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (str): - Required. - Unique identifier provided by the client - within the parent scope. It must be - between 1 and 128 characters and contain - alphanumeric characters, underscores, or - hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): - request = securitycenter_service.CreateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_mute_config(self, - request: Optional[Union[securitycenter_service.DeleteMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_mute_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest, dict]): - The request object. Request message for deleting a mute - config. - name (str): - Required. Name of the mute config to delete. Its format - is organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteMuteConfigRequest): - request = securitycenter_service.DeleteMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest, dict]): - The request object. Request message for deleting a - notification config. - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): - request = securitycenter_service.DeleteNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def delete_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - client.delete_security_health_analytics_custom_module(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for deleting security - health analytics custom modules. - name (str): - Required. Name of the custom module - to delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def get_big_query_export(self, - request: Optional[Union[securitycenter_service.GetBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Gets a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = client.get_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetBigQueryExportRequest, dict]): - The request object. Request message for retrieving a - BigQuery export. - name (str): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetBigQueryExportRequest): - request = securitycenter_service.GetBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_mute_config(self, - request: Optional[Union[securitycenter_service.GetMuteConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> mute_config.MuteConfig: - r"""Gets a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetMuteConfigRequest, dict]): - The request object. Request message for retrieving a mute - config. - name (str): - Required. Name of the mute config to retrieve. Its - format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetMuteConfigRequest): - request = securitycenter_service.GetMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetNotificationConfigRequest, dict]): - The request object. Request message for getting a - notification config. - name (str): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", - or - "projects/[project_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): - request = securitycenter_service.GetNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_effective_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_effective_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = client.get_effective_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for getting effective - security health analytics custom - modules. - name (str): - Required. Name of the effective - custom module to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the representation of - a Security Health Analytics custom module at a - specified level of the resource hierarchy: - organization, folder, or project. If a custom module - is inherited from a parent organization or folder, - the value of the enablementState property in - EffectiveSecurityHealthAnalyticsCustomModule is set - to the value that is effective in the parent, instead - of INHERITED. For example, if the module is enabled - in a parent organization or folder, the effective - enablement_state for the module in all child folders - or projects is also enabled. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_effective_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Retrieves a SecurityHealthAnalyticsCustomModule. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSecurityHealthAnalyticsCustomModuleRequest( - name="name_value", - ) - - # Make the request - response = client.get_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for getting security - health analytics custom modules. - name (str): - Required. Name of the custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}" - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_descendant_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_descendant_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListDescendantSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_descendant_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing - descendant security health analytics - custom modules. - parent (str): - Required. Name of parent to list - descendant custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager: - Response message for listing - descendant security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_descendant_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_mute_configs(self, - request: Optional[Union[securitycenter_service.ListMuteConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListMuteConfigsPager: - r"""Lists mute configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListMuteConfigsRequest, dict]): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager: - Response message for listing mute - configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListMuteConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListMuteConfigsRequest): - request = securitycenter_service.ListMuteConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_mute_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListMuteConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. - parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): - request = securitycenter_service.ListNotificationConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_effective_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_effective_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_effective_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing effective - security health analytics custom - modules. - parent (str): - Required. Name of parent to list - effective custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - Response message for listing - effective security health analytics - custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_effective_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_security_health_analytics_custom_modules(self, - request: Optional[Union[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSecurityHealthAnalyticsCustomModulesPager: - r"""Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_security_health_analytics_custom_modules(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSecurityHealthAnalyticsCustomModulesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_security_health_analytics_custom_modules(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest, dict]): - The request object. Request message for listing security - health analytics custom modules. - parent (str): - Required. Name of parent to list - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings" - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager: - Response message for listing security - health analytics custom modules. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_security_health_analytics_custom_modules] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSecurityHealthAnalyticsCustomModulesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_mute(self, - request: Optional[Union[securitycenter_service.SetMuteRequest, dict]] = None, - *, - name: Optional[str] = None, - mute: Optional[finding.Finding.Mute] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the mute state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = client.set_mute(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.SetMuteRequest, dict]): - The request object. Request message for updating a - finding's mute status. - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Required. The desired state of the - Mute. - - This corresponds to the ``mute`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, mute]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetMuteRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetMuteRequest): - request = securitycenter_service.SetMuteRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if mute is not None: - request.mute = mute - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_mute] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_external_system(self, - request: Optional[Union[securitycenter_service.UpdateExternalSystemRequest, dict]] = None, - *, - external_system: Optional[gcs_external_system.ExternalSystem] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_external_system.ExternalSystem: - r"""Updates external system. This is for a given finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = client.update_external_system(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest, dict]): - The request object. Request message for updating a - ExternalSystem resource. - external_system (google.cloud.securitycenter_v1.types.ExternalSystem): - Required. The external system - resource to update. - - This corresponds to the ``external_system`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the external system resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([external_system, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateExternalSystemRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateExternalSystemRequest): - request = securitycenter_service.UpdateExternalSystemRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if external_system is not None: - request.external_system = external_system - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_external_system] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("external_system.name", request.external_system.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_mute_config(self, - request: Optional[Union[securitycenter_service.UpdateMuteConfigRequest, dict]] = None, - *, - mute_config: Optional[gcs_mute_config.MuteConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_mute_config.MuteConfig: - r"""Updates a mute config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = client.update_mute_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest, dict]): - The request object. Request message for updating a mute - config. - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being - updated. - - This corresponds to the ``mute_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([mute_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateMuteConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateMuteConfigRequest): - request = securitycenter_service.UpdateMuteConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if mute_config is not None: - request.mute_config = mute_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_mute_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("mute_config.name", request.mute_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest, dict]): - The request object. Request message for updating a - notification config. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): - request = securitycenter_service.UpdateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_health_analytics_custom_module(self, - request: Optional[Union[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]] = None, - *, - security_health_analytics_custom_module: Optional[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_security_health_analytics_custom_module(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityHealthAnalyticsCustomModuleRequest( - ) - - # Make the request - response = client.update_security_health_analytics_custom_module(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict]): - The request object. Request message for updating security - health analytics custom modules. - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. The SecurityHealthAnalytics - custom module to update. - - This corresponds to the ``security_health_analytics_custom_module`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to update. - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_health_analytics_custom_module, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_health_analytics_custom_module is not None: - request.security_health_analytics_custom_module = security_health_analytics_custom_module - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_health_analytics_custom_module] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_health_analytics_custom_module.name", request.security_health_analytics_custom_module.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_big_query_export(self, - request: Optional[Union[securitycenter_service.CreateBigQueryExportRequest, dict]] = None, - *, - parent: Optional[str] = None, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - big_query_export_id: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Creates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = client.create_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest, dict]): - The request object. Request message for creating a - BigQuery export. - parent (str): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being - created. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - big_query_export_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must consist of lower case letters, - numbers, and hyphen, with the first - character a letter, the last a letter or - a number, and a 63 character maximum. - - This corresponds to the ``big_query_export_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, big_query_export, big_query_export_id]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateBigQueryExportRequest): - request = securitycenter_service.CreateBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if big_query_export is not None: - request.big_query_export = big_query_export - if big_query_export_id is not None: - request.big_query_export_id = big_query_export_id - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_big_query_export(self, - request: Optional[Union[securitycenter_service.DeleteBigQueryExportRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes an existing BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - client.delete_big_query_export(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest, dict]): - The request object. Request message for deleting a - BigQuery export. - name (str): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteBigQueryExportRequest): - request = securitycenter_service.DeleteBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def update_big_query_export(self, - request: Optional[Union[securitycenter_service.UpdateBigQueryExportRequest, dict]] = None, - *, - big_query_export: Optional[bigquery_export.BigQueryExport] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> bigquery_export.BigQueryExport: - r"""Updates a BigQuery export. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = client.update_big_query_export(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest, dict]): - The request object. Request message for updating a - BigQuery export. - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being - updated. - - This corresponds to the ``big_query_export`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.types.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([big_query_export, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateBigQueryExportRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateBigQueryExportRequest): - request = securitycenter_service.UpdateBigQueryExportRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if big_query_export is not None: - request.big_query_export = big_query_export - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_big_query_export] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("big_query_export.name", request.big_query_export.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_big_query_exports(self, - request: Optional[Union[securitycenter_service.ListBigQueryExportsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListBigQueryExportsPager: - r"""Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1 - - def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest, dict]): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - parent (str): - Required. The parent, which owns the collection of - BigQuery exports. Its format is - "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager: - Response message for listing BigQuery - exports. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListBigQueryExportsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListBigQueryExportsRequest): - request = securitycenter_service.ListBigQueryExportsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_big_query_exports] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListBigQueryExportsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - def list_operations( - self, - request: Optional[operations_pb2.ListOperationsRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.ListOperationsResponse: - r"""Lists operations that match the specified filter in the request. - - Args: - request (:class:`~.operations_pb2.ListOperationsRequest`): - The request object. Request message for - `ListOperations` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.ListOperationsResponse: - Response message for ``ListOperations`` method. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.ListOperationsRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.list_operations, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - def get_operation( - self, - request: Optional[operations_pb2.GetOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operations_pb2.Operation: - r"""Gets the latest state of a long-running operation. - - Args: - request (:class:`~.operations_pb2.GetOperationRequest`): - The request object. Request message for - `GetOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - ~.operations_pb2.Operation: - An ``Operation`` object. - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.GetOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.get_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - response = rpc( - request, retry=retry, timeout=timeout, metadata=metadata,) - - # Done; return the response. - return response - - def delete_operation( - self, - request: Optional[operations_pb2.DeleteOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a long-running operation. - - This method indicates that the client is no longer interested - in the operation result. It does not cancel the operation. - If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.DeleteOperationRequest`): - The request object. Request message for - `DeleteOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.DeleteOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.delete_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - def cancel_operation( - self, - request: Optional[operations_pb2.CancelOperationRequest] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Starts asynchronous cancellation on a long-running operation. - - The server makes a best effort to cancel the operation, but success - is not guaranteed. If the server doesn't support this method, it returns - `google.rpc.Code.UNIMPLEMENTED`. - - Args: - request (:class:`~.operations_pb2.CancelOperationRequest`): - The request object. Request message for - `CancelOperation` method. - retry (google.api_core.retry.Retry): Designation of what errors, - if any, should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - Returns: - None - """ - # Create or coerce a protobuf request object. - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = operations_pb2.CancelOperationRequest(**request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method.wrap_method( - self._transport.cancel_operation, - default_timeout=None, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata( - (("name", request.name),)), - ) - - # Send the request. - rpc(request, retry=retry, timeout=timeout, metadata=metadata,) - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py deleted file mode 100644 index 14121825..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/pagers.py +++ /dev/null @@ -1,1355 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_descendant_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListDescendantSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - for page in self.pages: - yield from page.list_findings_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_findings_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListMuteConfigsPager: - """A pager for iterating through ``list_mute_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``mute_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListMuteConfigs`` requests and continue to iterate - through the ``mute_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListMuteConfigsResponse], - request: securitycenter_service.ListMuteConfigsRequest, - response: securitycenter_service.ListMuteConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListMuteConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListMuteConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[mute_config.MuteConfig]: - for page in self.pages: - yield from page.mute_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListMuteConfigsAsyncPager: - """A pager for iterating through ``list_mute_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``mute_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListMuteConfigs`` requests and continue to iterate - through the ``mute_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListMuteConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListMuteConfigsResponse]], - request: securitycenter_service.ListMuteConfigsRequest, - response: securitycenter_service.ListMuteConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListMuteConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListMuteConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListMuteConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListMuteConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[mute_config.MuteConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.mute_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[notification_config.NotificationConfig]: - for page in self.pages: - yield from page.notification_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsAsyncPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.notification_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``effective_security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``effective_security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.effective_security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_effective_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``effective_security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListEffectiveSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``effective_security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.effective_security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSecurityHealthAnalyticsCustomModulesPager: - """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse], - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - for page in self.pages: - yield from page.security_health_analytics_custom_modules - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSecurityHealthAnalyticsCustomModulesAsyncPager: - """A pager for iterating through ``list_security_health_analytics_custom_modules`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``security_health_analytics_custom_modules`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSecurityHealthAnalyticsCustomModules`` requests and continue to iterate - through the ``security_health_analytics_custom_modules`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]], - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - async def async_generator(): - async for page in self.pages: - for response in page.security_health_analytics_custom_modules: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListBigQueryExportsPager: - """A pager for iterating through ``list_big_query_exports`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``big_query_exports`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListBigQueryExports`` requests and continue to iterate - through the ``big_query_exports`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListBigQueryExportsResponse], - request: securitycenter_service.ListBigQueryExportsRequest, - response: securitycenter_service.ListBigQueryExportsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListBigQueryExportsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListBigQueryExportsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[bigquery_export.BigQueryExport]: - for page in self.pages: - yield from page.big_query_exports - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListBigQueryExportsAsyncPager: - """A pager for iterating through ``list_big_query_exports`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``big_query_exports`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListBigQueryExports`` requests and continue to iterate - through the ``big_query_exports`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListBigQueryExportsResponse]], - request: securitycenter_service.ListBigQueryExportsRequest, - response: securitycenter_service.ListBigQueryExportsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest): - The initial request object. - response (google.cloud.securitycenter_v1.types.ListBigQueryExportsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListBigQueryExportsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListBigQueryExportsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[bigquery_export.BigQueryExport]: - async def async_generator(): - async for page in self.pages: - for response in page.big_query_exports: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py deleted file mode 100644 index 96f2f1cd..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/base.py +++ /dev/null @@ -1,925 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.bulk_mute_findings: gapic_v1.method.wrap_method( - self.bulk_mute_findings, - default_timeout=None, - client_info=client_info, - ), - self.create_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.create_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.create_mute_config: gapic_v1.method.wrap_method( - self.create_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.create_notification_config: gapic_v1.method.wrap_method( - self.create_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_mute_config: gapic_v1.method.wrap_method( - self.delete_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.delete_notification_config: gapic_v1.method.wrap_method( - self.delete_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.delete_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.get_big_query_export: gapic_v1.method.wrap_method( - self.get_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_mute_config: gapic_v1.method.wrap_method( - self.get_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.get_notification_config: gapic_v1.method.wrap_method( - self.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_effective_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.get_effective_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.get_security_health_analytics_custom_module, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_descendant_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_descendant_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_mute_configs: gapic_v1.method.wrap_method( - self.list_mute_configs, - default_timeout=None, - client_info=client_info, - ), - self.list_notification_configs: gapic_v1.method.wrap_method( - self.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_effective_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_effective_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_security_health_analytics_custom_modules: gapic_v1.method.wrap_method( - self.list_security_health_analytics_custom_modules, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_mute: gapic_v1.method.wrap_method( - self.set_mute, - default_timeout=None, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_external_system: gapic_v1.method.wrap_method( - self.update_external_system, - default_timeout=None, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_mute_config: gapic_v1.method.wrap_method( - self.update_mute_config, - default_timeout=None, - client_info=client_info, - ), - self.update_notification_config: gapic_v1.method.wrap_method( - self.update_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_health_analytics_custom_module: gapic_v1.method.wrap_method( - self.update_security_health_analytics_custom_module, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - self.create_big_query_export: gapic_v1.method.wrap_method( - self.create_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.delete_big_query_export: gapic_v1.method.wrap_method( - self.delete_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.update_big_query_export: gapic_v1.method.wrap_method( - self.update_big_query_export, - default_timeout=None, - client_info=client_info, - ), - self.list_big_query_exports: gapic_v1.method.wrap_method( - self.list_big_query_exports, - default_timeout=None, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - Union[ - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - Union[ - gcs_mute_config.MuteConfig, - Awaitable[gcs_mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - Union[ - mute_config.MuteConfig, - Awaitable[mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Union[ - notification_config.NotificationConfig, - Awaitable[notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Union[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, - Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - Union[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - Union[ - securitycenter_service.ListMuteConfigsResponse, - Awaitable[securitycenter_service.ListMuteConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Union[ - securitycenter_service.ListNotificationConfigsResponse, - Awaitable[securitycenter_service.ListNotificationConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - Union[ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse, - Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - Union[ - gcs_external_system.ExternalSystem, - Awaitable[gcs_external_system.ExternalSystem] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - Union[ - gcs_mute_config.MuteConfig, - Awaitable[gcs_mute_config.MuteConfig] - ]]: - raise NotImplementedError() - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Union[ - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - Union[ - bigquery_export.BigQueryExport, - Awaitable[bigquery_export.BigQueryExport] - ]]: - raise NotImplementedError() - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - Union[ - securitycenter_service.ListBigQueryExportsResponse, - Awaitable[securitycenter_service.ListBigQueryExportsResponse] - ]]: - raise NotImplementedError() - - @property - def list_operations( - self, - ) -> Callable[ - [operations_pb2.ListOperationsRequest], - Union[operations_pb2.ListOperationsResponse, Awaitable[operations_pb2.ListOperationsResponse]], - ]: - raise NotImplementedError() - - @property - def get_operation( - self, - ) -> Callable[ - [operations_pb2.GetOperationRequest], - Union[operations_pb2.Operation, Awaitable[operations_pb2.Operation]], - ]: - raise NotImplementedError() - - @property - def cancel_operation( - self, - ) -> Callable[ - [operations_pb2.CancelOperationRequest], - None, - ]: - raise NotImplementedError() - - @property - def delete_operation( - self, - ) -> Callable[ - [operations_pb2.DeleteOperationRequest], - None, - ]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py deleted file mode 100644 index 6864d7f9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,1555 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - operations_pb2.Operation]: - r"""Return a callable for the bulk mute findings method over gRPC. - - Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - Returns: - Callable[[~.BulkMuteFindingsRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'bulk_mute_findings' not in self._stubs: - self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', - request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['bulk_mute_findings'] - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the create security health - analytics custom module method over gRPC. - - Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - Returns: - Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_security_health_analytics_custom_module' not in self._stubs: - self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['create_security_health_analytics_custom_module'] - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - r"""Return a callable for the create mute config method over gRPC. - - Creates a mute config. - - Returns: - Callable[[~.CreateMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_mute_config' not in self._stubs: - self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', - request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['create_mute_config'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete mute config method over gRPC. - - Deletes an existing mute config. - - Returns: - Callable[[~.DeleteMuteConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_mute_config' not in self._stubs: - self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', - request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_mute_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete security health - analytics custom module method over gRPC. - - Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - Returns: - Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_security_health_analytics_custom_module' not in self._stubs: - self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_security_health_analytics_custom_module'] - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the get big query export method over gRPC. - - Gets a BigQuery export. - - Returns: - Callable[[~.GetBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_big_query_export' not in self._stubs: - self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', - request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['get_big_query_export'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - mute_config.MuteConfig]: - r"""Return a callable for the get mute config method over gRPC. - - Gets a mute config. - - Returns: - Callable[[~.GetMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_mute_config' not in self._stubs: - self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', - request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, - response_deserializer=mute_config.MuteConfig.deserialize, - ) - return self._stubs['get_mute_config'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the get effective security health - analytics custom module method over gRPC. - - Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - ~.EffectiveSecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_effective_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_effective_security_health_analytics_custom_module'] - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the get security health analytics - custom module method over gRPC. - - Retrieves a SecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_security_health_analytics_custom_module'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list descendant security - health analytics custom modules method over gRPC. - - Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - Returns: - Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - ~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_descendant_security_health_analytics_custom_modules'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - securitycenter_service.ListMuteConfigsResponse]: - r"""Return a callable for the list mute configs method over gRPC. - - Lists mute configs. - - Returns: - Callable[[~.ListMuteConfigsRequest], - ~.ListMuteConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_mute_configs' not in self._stubs: - self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', - request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, - ) - return self._stubs['list_mute_configs'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - ~.ListNotificationConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list effective security health - analytics custom modules method over gRPC. - - Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - Returns: - Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - ~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_effective_security_health_analytics_custom_modules'] - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - r"""Return a callable for the list security health analytics - custom modules method over gRPC. - - Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - Returns: - Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], - ~.ListSecurityHealthAnalyticsCustomModulesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_security_health_analytics_custom_modules'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - finding.Finding]: - r"""Return a callable for the set mute method over gRPC. - - Updates the mute state of a finding. - - Returns: - Callable[[~.SetMuteRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_mute' not in self._stubs: - self._stubs['set_mute'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', - request_serializer=securitycenter_service.SetMuteRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_mute'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - gcs_external_system.ExternalSystem]: - r"""Return a callable for the update external system method over gRPC. - - Updates external system. This is for a given finding. - - Returns: - Callable[[~.UpdateExternalSystemRequest], - ~.ExternalSystem]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_external_system' not in self._stubs: - self._stubs['update_external_system'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', - request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, - response_deserializer=gcs_external_system.ExternalSystem.deserialize, - ) - return self._stubs['update_external_system'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - r"""Return a callable for the update mute config method over gRPC. - - Updates a mute config. - - Returns: - Callable[[~.UpdateMuteConfigRequest], - ~.MuteConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_mute_config' not in self._stubs: - self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', - request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['update_mute_config'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - r"""Return a callable for the update security health - analytics custom module method over gRPC. - - Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - Returns: - Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], - ~.SecurityHealthAnalyticsCustomModule]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_health_analytics_custom_module' not in self._stubs: - self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['update_security_health_analytics_custom_module'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the create big query export method over gRPC. - - Creates a BigQuery export. - - Returns: - Callable[[~.CreateBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_big_query_export' not in self._stubs: - self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', - request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['create_big_query_export'] - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete big query export method over gRPC. - - Deletes an existing BigQuery export. - - Returns: - Callable[[~.DeleteBigQueryExportRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_big_query_export' not in self._stubs: - self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', - request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_big_query_export'] - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - r"""Return a callable for the update big query export method over gRPC. - - Updates a BigQuery export. - - Returns: - Callable[[~.UpdateBigQueryExportRequest], - ~.BigQueryExport]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_big_query_export' not in self._stubs: - self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', - request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['update_big_query_export'] - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - securitycenter_service.ListBigQueryExportsResponse]: - r"""Return a callable for the list big query exports method over gRPC. - - Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - Returns: - Callable[[~.ListBigQueryExportsRequest], - ~.ListBigQueryExportsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_big_query_exports' not in self._stubs: - self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', - request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, - response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, - ) - return self._stubs['list_big_query_exports'] - - def close(self): - self.grpc_channel.close() - - @property - def delete_operation( - self, - ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: - r"""Return a callable for the delete_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "delete_operation" not in self._stubs: - self._stubs["delete_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/DeleteOperation", - request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["delete_operation"] - - @property - def cancel_operation( - self, - ) -> Callable[[operations_pb2.CancelOperationRequest], None]: - r"""Return a callable for the cancel_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "cancel_operation" not in self._stubs: - self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/CancelOperation", - request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["cancel_operation"] - - @property - def get_operation( - self, - ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: - r"""Return a callable for the get_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "get_operation" not in self._stubs: - self._stubs["get_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/GetOperation", - request_serializer=operations_pb2.GetOperationRequest.SerializeToString, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs["get_operation"] - - @property - def list_operations( - self, - ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: - r"""Return a callable for the list_operations method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "list_operations" not in self._stubs: - self._stubs["list_operations"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/ListOperations", - request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, - response_deserializer=operations_pb2.ListOperationsResponse.FromString, - ) - return self._stubs["list_operations"] - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 8fa655b4..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,1554 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the bulk mute findings method over gRPC. - - Kicks off an LRO to bulk mute findings for a parent - based on a filter. The parent can be either an - organization, folder or project. The findings matched by - the filter will be muted after the LRO is done. - - Returns: - Callable[[~.BulkMuteFindingsRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'bulk_mute_findings' not in self._stubs: - self._stubs['bulk_mute_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/BulkMuteFindings', - request_serializer=securitycenter_service.BulkMuteFindingsRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['bulk_mute_findings'] - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the create security health - analytics custom module method over gRPC. - - Creates a resident - SecurityHealthAnalyticsCustomModule at the scope of the - given CRM parent, and also creates inherited - SecurityHealthAnalyticsCustomModules for all CRM - descendants of the given parent. These modules are - enabled by default. - - Returns: - Callable[[~.CreateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_security_health_analytics_custom_module' not in self._stubs: - self._stubs['create_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['create_security_health_analytics_custom_module'] - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - Awaitable[gcs_mute_config.MuteConfig]]: - r"""Return a callable for the create mute config method over gRPC. - - Creates a mute config. - - Returns: - Callable[[~.CreateMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_mute_config' not in self._stubs: - self._stubs['create_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateMuteConfig', - request_serializer=securitycenter_service.CreateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['create_mute_config'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete mute config method over gRPC. - - Deletes an existing mute config. - - Returns: - Callable[[~.DeleteMuteConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_mute_config' not in self._stubs: - self._stubs['delete_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteMuteConfig', - request_serializer=securitycenter_service.DeleteMuteConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_mute_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete security health - analytics custom module method over gRPC. - - Deletes the specified - SecurityHealthAnalyticsCustomModule and all of its - descendants in the CRM hierarchy. This method is only - supported for resident custom modules. - - Returns: - Callable[[~.DeleteSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_security_health_analytics_custom_module' not in self._stubs: - self._stubs['delete_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_security_health_analytics_custom_module'] - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the get big query export method over gRPC. - - Gets a BigQuery export. - - Returns: - Callable[[~.GetBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_big_query_export' not in self._stubs: - self._stubs['get_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetBigQueryExport', - request_serializer=securitycenter_service.GetBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['get_big_query_export'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - Awaitable[mute_config.MuteConfig]]: - r"""Return a callable for the get mute config method over gRPC. - - Gets a mute config. - - Returns: - Callable[[~.GetMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_mute_config' not in self._stubs: - self._stubs['get_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetMuteConfig', - request_serializer=securitycenter_service.GetMuteConfigRequest.serialize, - response_deserializer=mute_config.MuteConfig.deserialize, - ) - return self._stubs['get_mute_config'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Awaitable[notification_config.NotificationConfig]]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the get effective security health - analytics custom module method over gRPC. - - Retrieves an - EffectiveSecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.EffectiveSecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_effective_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_effective_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetEffectiveSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_effective_security_health_analytics_custom_module'] - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the get security health analytics - custom module method over gRPC. - - Retrieves a SecurityHealthAnalyticsCustomModule. - - Returns: - Callable[[~.GetSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_security_health_analytics_custom_module' not in self._stubs: - self._stubs['get_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['get_security_health_analytics_custom_module'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list descendant security - health analytics custom modules method over gRPC. - - Returns a list of all resident - SecurityHealthAnalyticsCustomModules under the given CRM - parent and all of the parent’s CRM descendants. - - Returns: - Callable[[~.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_descendant_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_descendant_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListDescendantSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_descendant_security_health_analytics_custom_modules'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - Awaitable[securitycenter_service.ListMuteConfigsResponse]]: - r"""Return a callable for the list mute configs method over gRPC. - - Lists mute configs. - - Returns: - Callable[[~.ListMuteConfigsRequest], - Awaitable[~.ListMuteConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_mute_configs' not in self._stubs: - self._stubs['list_mute_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListMuteConfigs', - request_serializer=securitycenter_service.ListMuteConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListMuteConfigsResponse.deserialize, - ) - return self._stubs['list_mute_configs'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - Awaitable[~.ListNotificationConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list effective security health - analytics custom modules method over gRPC. - - Returns a list of all - EffectiveSecurityHealthAnalyticsCustomModules for the - given parent. This includes resident modules defined at - the scope of the parent, and inherited modules, - inherited from CRM ancestors. - - Returns: - Callable[[~.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_effective_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_effective_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListEffectiveSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_effective_security_health_analytics_custom_modules'] - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]]: - r"""Return a callable for the list security health analytics - custom modules method over gRPC. - - Returns a list of all - SecurityHealthAnalyticsCustomModules for the given - parent. This includes resident modules defined at the - scope of the parent, and inherited modules, inherited - from CRM ancestors. - - Returns: - Callable[[~.ListSecurityHealthAnalyticsCustomModulesRequest], - Awaitable[~.ListSecurityHealthAnalyticsCustomModulesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_security_health_analytics_custom_modules' not in self._stubs: - self._stubs['list_security_health_analytics_custom_modules'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSecurityHealthAnalyticsCustomModules', - request_serializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.serialize, - response_deserializer=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.deserialize, - ) - return self._stubs['list_security_health_analytics_custom_modules'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set mute method over gRPC. - - Updates the mute state of a finding. - - Returns: - Callable[[~.SetMuteRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_mute' not in self._stubs: - self._stubs['set_mute'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetMute', - request_serializer=securitycenter_service.SetMuteRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_mute'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - Awaitable[gcs_external_system.ExternalSystem]]: - r"""Return a callable for the update external system method over gRPC. - - Updates external system. This is for a given finding. - - Returns: - Callable[[~.UpdateExternalSystemRequest], - Awaitable[~.ExternalSystem]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_external_system' not in self._stubs: - self._stubs['update_external_system'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateExternalSystem', - request_serializer=securitycenter_service.UpdateExternalSystemRequest.serialize, - response_deserializer=gcs_external_system.ExternalSystem.deserialize, - ) - return self._stubs['update_external_system'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - Awaitable[gcs_mute_config.MuteConfig]]: - r"""Return a callable for the update mute config method over gRPC. - - Updates a mute config. - - Returns: - Callable[[~.UpdateMuteConfigRequest], - Awaitable[~.MuteConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_mute_config' not in self._stubs: - self._stubs['update_mute_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateMuteConfig', - request_serializer=securitycenter_service.UpdateMuteConfigRequest.serialize, - response_deserializer=gcs_mute_config.MuteConfig.deserialize, - ) - return self._stubs['update_mute_config'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]]: - r"""Return a callable for the update security health - analytics custom module method over gRPC. - - Updates the SecurityHealthAnalyticsCustomModule under - the given name based on the given update mask. Updating - the enablement state is supported on both resident and - inherited modules (though resident modules cannot have - an enablement state of “inherited”). Updating the - display name and custom config of a module is supported - on resident modules only. - - Returns: - Callable[[~.UpdateSecurityHealthAnalyticsCustomModuleRequest], - Awaitable[~.SecurityHealthAnalyticsCustomModule]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_health_analytics_custom_module' not in self._stubs: - self._stubs['update_security_health_analytics_custom_module'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityHealthAnalyticsCustomModule', - request_serializer=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.serialize, - response_deserializer=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.deserialize, - ) - return self._stubs['update_security_health_analytics_custom_module'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the create big query export method over gRPC. - - Creates a BigQuery export. - - Returns: - Callable[[~.CreateBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_big_query_export' not in self._stubs: - self._stubs['create_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/CreateBigQueryExport', - request_serializer=securitycenter_service.CreateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['create_big_query_export'] - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete big query export method over gRPC. - - Deletes an existing BigQuery export. - - Returns: - Callable[[~.DeleteBigQueryExportRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_big_query_export' not in self._stubs: - self._stubs['delete_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/DeleteBigQueryExport', - request_serializer=securitycenter_service.DeleteBigQueryExportRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_big_query_export'] - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - Awaitable[bigquery_export.BigQueryExport]]: - r"""Return a callable for the update big query export method over gRPC. - - Updates a BigQuery export. - - Returns: - Callable[[~.UpdateBigQueryExportRequest], - Awaitable[~.BigQueryExport]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_big_query_export' not in self._stubs: - self._stubs['update_big_query_export'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/UpdateBigQueryExport', - request_serializer=securitycenter_service.UpdateBigQueryExportRequest.serialize, - response_deserializer=bigquery_export.BigQueryExport.deserialize, - ) - return self._stubs['update_big_query_export'] - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - Awaitable[securitycenter_service.ListBigQueryExportsResponse]]: - r"""Return a callable for the list big query exports method over gRPC. - - Lists BigQuery exports. Note that when requesting - BigQuery exports at a given level all exports under that - level are also returned e.g. if requesting BigQuery - exports under a folder, then all BigQuery exports - immediately under the folder plus the ones created under - the projects within the folder are returned. - - Returns: - Callable[[~.ListBigQueryExportsRequest], - Awaitable[~.ListBigQueryExportsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_big_query_exports' not in self._stubs: - self._stubs['list_big_query_exports'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1.SecurityCenter/ListBigQueryExports', - request_serializer=securitycenter_service.ListBigQueryExportsRequest.serialize, - response_deserializer=securitycenter_service.ListBigQueryExportsResponse.deserialize, - ) - return self._stubs['list_big_query_exports'] - - def close(self): - return self.grpc_channel.close() - - @property - def delete_operation( - self, - ) -> Callable[[operations_pb2.DeleteOperationRequest], None]: - r"""Return a callable for the delete_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "delete_operation" not in self._stubs: - self._stubs["delete_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/DeleteOperation", - request_serializer=operations_pb2.DeleteOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["delete_operation"] - - @property - def cancel_operation( - self, - ) -> Callable[[operations_pb2.CancelOperationRequest], None]: - r"""Return a callable for the cancel_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "cancel_operation" not in self._stubs: - self._stubs["cancel_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/CancelOperation", - request_serializer=operations_pb2.CancelOperationRequest.SerializeToString, - response_deserializer=None, - ) - return self._stubs["cancel_operation"] - - @property - def get_operation( - self, - ) -> Callable[[operations_pb2.GetOperationRequest], operations_pb2.Operation]: - r"""Return a callable for the get_operation method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "get_operation" not in self._stubs: - self._stubs["get_operation"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/GetOperation", - request_serializer=operations_pb2.GetOperationRequest.SerializeToString, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs["get_operation"] - - @property - def list_operations( - self, - ) -> Callable[[operations_pb2.ListOperationsRequest], operations_pb2.ListOperationsResponse]: - r"""Return a callable for the list_operations method over gRPC. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if "list_operations" not in self._stubs: - self._stubs["list_operations"] = self.grpc_channel.unary_unary( - "/google.longrunning.Operations/ListOperations", - request_serializer=operations_pb2.ListOperationsRequest.SerializeToString, - response_deserializer=operations_pb2.ListOperationsResponse.FromString, - ) - return self._stubs["list_operations"] - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py deleted file mode 100644 index d1aad202..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/services/security_center/transports/rest.py +++ /dev/null @@ -1,6237 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from google.longrunning import operations_pb2 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_bulk_mute_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_bulk_mute_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_delete_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_delete_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_get_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_effective_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_effective_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_big_query_exports(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_big_query_exports(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_descendant_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_descendant_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_effective_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_effective_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_mute_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_mute_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_notification_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_notification_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_security_health_analytics_custom_modules(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_security_health_analytics_custom_modules(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_mute(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_mute(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_big_query_export(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_big_query_export(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_external_system(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_external_system(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_mute_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_mute_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_health_analytics_custom_module(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_health_analytics_custom_module(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_bulk_mute_findings(self, request: securitycenter_service.BulkMuteFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.BulkMuteFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for bulk_mute_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_bulk_mute_findings(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for bulk_mute_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_big_query_export(self, request: securitycenter_service.CreateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for create_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_mute_config(self, request: securitycenter_service.CreateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: - """Post-rpc interceptor for create_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_security_health_analytics_custom_module(self, request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for create_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_big_query_export(self, request: securitycenter_service.DeleteBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_mute_config(self, request: securitycenter_service.DeleteMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_delete_security_health_analytics_custom_module(self, request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_get_big_query_export(self, request: securitycenter_service.GetBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for get_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_effective_security_health_analytics_custom_module(self, request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_effective_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_effective_security_health_analytics_custom_module(self, response: effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for get_effective_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_mute_config(self, request: securitycenter_service.GetMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_mute_config(self, response: mute_config.MuteConfig) -> mute_config.MuteConfig: - """Post-rpc interceptor for get_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: - """Post-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_security_health_analytics_custom_module(self, request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_security_health_analytics_custom_module(self, response: security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for get_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_big_query_exports(self, request: securitycenter_service.ListBigQueryExportsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListBigQueryExportsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_big_query_exports - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_big_query_exports(self, response: securitycenter_service.ListBigQueryExportsResponse) -> securitycenter_service.ListBigQueryExportsResponse: - """Post-rpc interceptor for list_big_query_exports - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_descendant_security_health_analytics_custom_modules(self, request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_descendant_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_descendant_security_health_analytics_custom_modules(self, response: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_descendant_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_effective_security_health_analytics_custom_modules(self, request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_effective_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_effective_security_health_analytics_custom_modules(self, response: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_effective_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_mute_configs(self, request: securitycenter_service.ListMuteConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListMuteConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_mute_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_mute_configs(self, response: securitycenter_service.ListMuteConfigsResponse) -> securitycenter_service.ListMuteConfigsResponse: - """Post-rpc interceptor for list_mute_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: - """Post-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_security_health_analytics_custom_modules(self, request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_security_health_analytics_custom_modules - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_security_health_analytics_custom_modules(self, response: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - """Post-rpc interceptor for list_security_health_analytics_custom_modules - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_mute(self, request: securitycenter_service.SetMuteRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetMuteRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_mute - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_mute(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_mute - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_big_query_export(self, request: securitycenter_service.UpdateBigQueryExportRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateBigQueryExportRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_big_query_export - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_big_query_export(self, response: bigquery_export.BigQueryExport) -> bigquery_export.BigQueryExport: - """Post-rpc interceptor for update_big_query_export - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_external_system(self, request: securitycenter_service.UpdateExternalSystemRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateExternalSystemRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_external_system - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_external_system(self, response: gcs_external_system.ExternalSystem) -> gcs_external_system.ExternalSystem: - """Post-rpc interceptor for update_external_system - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_mute_config(self, request: securitycenter_service.UpdateMuteConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateMuteConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_mute_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_mute_config(self, response: gcs_mute_config.MuteConfig) -> gcs_mute_config.MuteConfig: - """Post-rpc interceptor for update_mute_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_health_analytics_custom_module(self, request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_health_analytics_custom_module - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_health_analytics_custom_module(self, response: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - """Post-rpc interceptor for update_security_health_analytics_custom_module - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - def pre_cancel_operation( - self, request: operations_pb2.CancelOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.CancelOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for cancel_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_cancel_operation( - self, response: None - ) -> None: - """Post-rpc interceptor for cancel_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_operation( - self, request: operations_pb2.DeleteOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.DeleteOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_delete_operation( - self, response: None - ) -> None: - """Post-rpc interceptor for delete_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_operation( - self, request: operations_pb2.GetOperationRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.GetOperationRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_operation - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_operation( - self, response: operations_pb2.Operation - ) -> operations_pb2.Operation: - """Post-rpc interceptor for get_operation - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_operations( - self, request: operations_pb2.ListOperationsRequest, metadata: Sequence[Tuple[str, str]] - ) -> Tuple[operations_pb2.ListOperationsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_operations - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_operations( - self, response: operations_pb2.ListOperationsResponse - ) -> operations_pb2.ListOperationsResponse: - """Post-rpc interceptor for list_operations - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1/{name=organizations/*/operations/*}:cancel', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _BulkMuteFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("BulkMuteFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.BulkMuteFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the bulk mute findings method over HTTP. - - Args: - request (~.securitycenter_service.BulkMuteFindingsRequest): - The request object. Request message for bulk findings - update. - Note: - 1. If multiple bulk update requests - match the same resource, the order in - which they get executed is not defined. - 2. Once a bulk operation is started, - there is no way to stop it. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/findings:bulkMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/findings:bulkMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/findings:bulkMute', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_bulk_mute_findings(request, metadata) - pb_request = securitycenter_service.BulkMuteFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_bulk_mute_findings(resp) - return resp - - class _CreateBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "bigQueryExportId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the create big query export method over HTTP. - - Args: - request (~.securitycenter_service.CreateBigQueryExportRequest): - The request object. Request message for creating a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/bigQueryExports', - 'body': 'big_query_export', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/bigQueryExports', - 'body': 'big_query_export', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/bigQueryExports', - 'body': 'big_query_export', - }, - ] - request, metadata = self._interceptor.pre_create_big_query_export(request, metadata) - pb_request = securitycenter_service.CreateBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_big_query_export(resp) - return resp - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "muteConfigId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_mute_config.MuteConfig: - r"""Call the create mute config method over HTTP. - - Args: - request (~.securitycenter_service.CreateMuteConfigRequest): - The request object. Request message for creating a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/muteConfigs', - 'body': 'mute_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/muteConfigs', - 'body': 'mute_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/muteConfigs', - 'body': 'mute_config', - }, - ] - request, metadata = self._interceptor.pre_create_mute_config(request, metadata) - pb_request = securitycenter_service.CreateMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_mute_config.MuteConfig() - pb_resp = gcs_mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_mute_config(resp) - return resp - - class _CreateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "configId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the create notification - config method over HTTP. - - Args: - request (~.securitycenter_service.CreateNotificationConfigRequest): - The request object. Request message for creating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/notificationConfigs', - 'body': 'notification_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/notificationConfigs', - 'body': 'notification_config', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/notificationConfigs', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_create_notification_config(request, metadata) - pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_notification_config(resp) - return resp - - class _CreateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the create security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for creating security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', - 'body': 'security_health_analytics_custom_module', - }, - ] - request, metadata = self._interceptor.pre_create_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_security_health_analytics_custom_module(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _DeleteBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete big query export method over HTTP. - - Args: - request (~.securitycenter_service.DeleteBigQueryExportRequest): - The request object. Request message for deleting a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/bigQueryExports/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/bigQueryExports/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_big_query_export(request, metadata) - pb_request = securitycenter_service.DeleteBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete mute config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteMuteConfigRequest): - The request object. Request message for deleting a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/muteConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/muteConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/muteConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_mute_config(request, metadata) - pb_request = securitycenter_service.DeleteMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete notification - config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteNotificationConfigRequest): - The request object. Request message for deleting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/notificationConfigs/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) - pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _DeleteSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for deleting security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'delete', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _GetBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("GetBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the get big query export method over HTTP. - - Args: - request (~.securitycenter_service.GetBigQueryExportRequest): - The request object. Request message for retrieving a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/bigQueryExports/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/bigQueryExports/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/bigQueryExports/*}', - }, - ] - request, metadata = self._interceptor.pre_get_big_query_export(request, metadata) - pb_request = securitycenter_service.GetBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_big_query_export(resp) - return resp - - class _GetEffectiveSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("GetEffectiveSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - r"""Call the get effective security - health analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for getting effective - security health analytics custom - modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule: - An EffectiveSecurityHealthAnalyticsCustomModule is the - representation of a Security Health Analytics custom - module at a specified level of the resource hierarchy: - organization, folder, or project. If a custom module is - inherited from a parent organization or folder, the - value of the ``enablementState`` property in - EffectiveSecurityHealthAnalyticsCustomModule is set to - the value that is effective in the parent, instead of - ``INHERITED``. For example, if the module is enabled in - a parent organization or folder, the effective - enablement_state for the module in all child folders or - projects is also ``enabled``. - EffectiveSecurityHealthAnalyticsCustomModule is - read-only. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}', - }, - ] - request, metadata = self._interceptor.pre_get_effective_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - pb_resp = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_effective_security_health_analytics_custom_module(resp) - return resp - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> mute_config.MuteConfig: - r"""Call the get mute config method over HTTP. - - Args: - request (~.securitycenter_service.GetMuteConfigRequest): - The request object. Request message for retrieving a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/muteConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/muteConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/muteConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_mute_config(request, metadata) - pb_request = securitycenter_service.GetMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = mute_config.MuteConfig() - pb_resp = mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_mute_config(resp) - return resp - - class _GetNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> notification_config.NotificationConfig: - r"""Call the get notification config method over HTTP. - - Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/notificationConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/notificationConfigs/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_notification_config(request, metadata) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the get security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for getting security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - }, -{ - 'method': 'get', - 'uri': '/v1/{name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - }, - ] - request, metadata = self._interceptor.pre_get_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_security_health_analytics_custom_module(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=folders/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{parent=projects/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListBigQueryExports(SecurityCenterRestStub): - def __hash__(self): - return hash("ListBigQueryExports") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListBigQueryExportsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListBigQueryExportsResponse: - r"""Call the list big query exports method over HTTP. - - Args: - request (~.securitycenter_service.ListBigQueryExportsRequest): - The request object. Request message for listing BigQuery - exports at a given scope e.g. - organization, folder or project. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListBigQueryExportsResponse: - Response message for listing BigQuery - exports. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/bigQueryExports', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/bigQueryExports', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/bigQueryExports', - }, - ] - request, metadata = self._interceptor.pre_list_big_query_exports(request, metadata) - pb_request = securitycenter_service.ListBigQueryExportsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListBigQueryExportsResponse() - pb_resp = securitycenter_service.ListBigQueryExportsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_big_query_exports(resp) - return resp - - class _ListDescendantSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListDescendantSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list descendant security - health analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing - descendant security health analytics - custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing - descendant security health analytics - custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules:listDescendant', - }, - ] - request, metadata = self._interceptor.pre_list_descendant_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_descendant_security_health_analytics_custom_modules(resp) - return resp - - class _ListEffectiveSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListEffectiveSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list effective security - health analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing effective - security health analytics custom - modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing - effective security health analytics - custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/effectiveCustomModules', - }, - ] - request, metadata = self._interceptor.pre_list_effective_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_effective_security_health_analytics_custom_modules(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListMuteConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListMuteConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListMuteConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListMuteConfigsResponse: - r"""Call the list mute configs method over HTTP. - - Args: - request (~.securitycenter_service.ListMuteConfigsRequest): - The request object. Request message for listing mute - configs at a given scope e.g. - organization, folder or project. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListMuteConfigsResponse: - Response message for listing mute - configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/muteConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/muteConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/muteConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_mute_configs(request, metadata) - pb_request = securitycenter_service.ListMuteConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListMuteConfigsResponse() - pb_resp = securitycenter_service.ListMuteConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_mute_configs(resp) - return resp - - class _ListNotificationConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListNotificationConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListNotificationConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListNotificationConfigsResponse: - r"""Call the list notification configs method over HTTP. - - Args: - request (~.securitycenter_service.ListNotificationConfigsRequest): - The request object. Request message for listing - notification configs. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListNotificationConfigsResponse: - Response message for listing - notification configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/notificationConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/notificationConfigs', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/notificationConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) - pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListNotificationConfigsResponse() - pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_notification_configs(resp) - return resp - - class _ListSecurityHealthAnalyticsCustomModules(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSecurityHealthAnalyticsCustomModules") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - r"""Call the list security health - analytics custom modules method over HTTP. - - Args: - request (~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - The request object. Request message for listing security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse: - Response message for listing security - health analytics custom modules. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*/securityHealthAnalyticsSettings}/customModules', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*/securityHealthAnalyticsSettings}/customModules', - }, - ] - request, metadata = self._interceptor.pre_list_security_health_analytics_custom_modules(request, metadata) - pb_request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - pb_resp = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_security_health_analytics_custom_modules(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{parent=organizations/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=folders/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1/{parent=projects/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _SetMute(SecurityCenterRestStub): - def __hash__(self): - return hash("SetMute") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetMuteRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set mute method over HTTP. - - Args: - request (~.securitycenter_service.SetMuteRequest): - The request object. Request message for updating a - finding's mute status. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/sources/*/findings/*}:setMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=folders/*/sources/*/findings/*}:setMute', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1/{name=projects/*/sources/*/findings/*}:setMute', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_mute(request, metadata) - pb_request = securitycenter_service.SetMuteRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_mute(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateBigQueryExport(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateBigQueryExport") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateBigQueryExportRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> bigquery_export.BigQueryExport: - r"""Call the update big query export method over HTTP. - - Args: - request (~.securitycenter_service.UpdateBigQueryExportRequest): - The request object. Request message for updating a - BigQuery export. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.bigquery_export.BigQueryExport: - Configures how to deliver Findings to - BigQuery Instance. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=organizations/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, -{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=folders/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, -{ - 'method': 'patch', - 'uri': '/v1/{big_query_export.name=projects/*/bigQueryExports/*}', - 'body': 'big_query_export', - }, - ] - request, metadata = self._interceptor.pre_update_big_query_export(request, metadata) - pb_request = securitycenter_service.UpdateBigQueryExportRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = bigquery_export.BigQueryExport() - pb_resp = bigquery_export.BigQueryExport.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_big_query_export(resp) - return resp - - class _UpdateExternalSystem(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateExternalSystem") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateExternalSystemRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_external_system.ExternalSystem: - r"""Call the update external system method over HTTP. - - Args: - request (~.securitycenter_service.UpdateExternalSystemRequest): - The request object. Request message for updating a - ExternalSystem resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_external_system.ExternalSystem: - Representation of third party - SIEM/SOAR fields within SCC. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, -{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=folders/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, -{ - 'method': 'patch', - 'uri': '/v1/{external_system.name=projects/*/sources/*/findings/*/externalSystems/*}', - 'body': 'external_system', - }, - ] - request, metadata = self._interceptor.pre_update_external_system(request, metadata) - pb_request = securitycenter_service.UpdateExternalSystemRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_external_system.ExternalSystem() - pb_resp = gcs_external_system.ExternalSystem.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_external_system(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - like security, risk, health, or privacy, - that is ingested into Security Command - Center for presentation, notification, - analysis, policy testing, and - enforcement. For example, a cross-site - scripting (XSS) vulnerability in an App - Engine application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1/{finding.name=folders/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1/{finding.name=projects/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateMuteConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateMuteConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateMuteConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_mute_config.MuteConfig: - r"""Call the update mute config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateMuteConfigRequest): - The request object. Request message for updating a mute - config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_mute_config.MuteConfig: - A mute config is a Cloud SCC resource - that contains the configuration to mute - create/update events of findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=organizations/*/muteConfigs/*}', - 'body': 'mute_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=folders/*/muteConfigs/*}', - 'body': 'mute_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{mute_config.name=projects/*/muteConfigs/*}', - 'body': 'mute_config', - }, - ] - request, metadata = self._interceptor.pre_update_mute_config(request, metadata) - pb_request = securitycenter_service.UpdateMuteConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_mute_config.MuteConfig() - pb_resp = gcs_mute_config.MuteConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_mute_config(resp) - return resp - - class _UpdateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the update notification - config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateNotificationConfigRequest): - The request object. Request message for updating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Cloud Security Command Center (Cloud - SCC) notification configs. - A notification config is a Cloud SCC - resource that contains the configuration - to send notifications for create/update - events of findings, assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=organizations/*/notificationConfigs/*}', - 'body': 'notification_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=folders/*/notificationConfigs/*}', - 'body': 'notification_config', - }, -{ - 'method': 'patch', - 'uri': '/v1/{notification_config.name=projects/*/notificationConfigs/*}', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_update_notification_config(request, metadata) - pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_notification_config(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityHealthAnalyticsCustomModule(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityHealthAnalyticsCustomModule") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - r"""Call the update security health - analytics custom module method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - The request object. Request message for updating security - health analytics custom modules. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule: - Represents an instance of a Security - Health Analytics custom module, - including its full module name, display - name, enablement state, and last updated - time. You can create a custom module at - the organization, folder, or project - level. Custom modules that you create at - the organization or folder level are - inherited by the child folders and - projects. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=folders/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_health_analytics_custom_module.name=projects/*/securityHealthAnalyticsSettings/customModules/*}', - 'body': 'security_health_analytics_custom_module', - }, - ] - request, metadata = self._interceptor.pre_update_security_health_analytics_custom_module(request, metadata) - pb_request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - pb_resp = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_health_analytics_custom_module(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=folders/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=projects/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, and other tools. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def bulk_mute_findings(self) -> Callable[ - [securitycenter_service.BulkMuteFindingsRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._BulkMuteFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_big_query_export(self) -> Callable[ - [securitycenter_service.CreateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_mute_config(self) -> Callable[ - [securitycenter_service.CreateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_big_query_export(self) -> Callable[ - [securitycenter_service.DeleteBigQueryExportRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_mute_config(self) -> Callable[ - [securitycenter_service.DeleteMuteConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_big_query_export(self) -> Callable[ - [securitycenter_service.GetBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_effective_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest], - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetEffectiveSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_mute_config(self) -> Callable[ - [securitycenter_service.GetMuteConfigRequest], - mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest], - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_big_query_exports(self) -> Callable[ - [securitycenter_service.ListBigQueryExportsRequest], - securitycenter_service.ListBigQueryExportsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListBigQueryExports(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_descendant_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListDescendantSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_effective_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListEffectiveSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_mute_configs(self) -> Callable[ - [securitycenter_service.ListMuteConfigsRequest], - securitycenter_service.ListMuteConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListMuteConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_security_health_analytics_custom_modules(self) -> Callable[ - [securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest], - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSecurityHealthAnalyticsCustomModules(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_mute(self) -> Callable[ - [securitycenter_service.SetMuteRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetMute(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_big_query_export(self) -> Callable[ - [securitycenter_service.UpdateBigQueryExportRequest], - bigquery_export.BigQueryExport]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateBigQueryExport(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_external_system(self) -> Callable[ - [securitycenter_service.UpdateExternalSystemRequest], - gcs_external_system.ExternalSystem]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateExternalSystem(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_mute_config(self) -> Callable[ - [securitycenter_service.UpdateMuteConfigRequest], - gcs_mute_config.MuteConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateMuteConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_health_analytics_custom_module(self) -> Callable[ - [securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest], - gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityHealthAnalyticsCustomModule(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def cancel_operation(self): - return self._CancelOperation(self._session, self._host, self._interceptor) # type: ignore - - class _CancelOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.CancelOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> None: - - r"""Call the cancel operation method over HTTP. - - Args: - request (operations_pb2.CancelOperationRequest): - The request object for CancelOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1/{name=organizations/*/operations/*}:cancel', - }, - ] - - request, metadata = self._interceptor.pre_cancel_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - return self._interceptor.post_cancel_operation(None) - - @property - def delete_operation(self): - return self._DeleteOperation(self._session, self._host, self._interceptor) # type: ignore - - class _DeleteOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.DeleteOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> None: - - r"""Call the delete operation method over HTTP. - - Args: - request (operations_pb2.DeleteOperationRequest): - The request object for DeleteOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ] - - request, metadata = self._interceptor.pre_delete_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - return self._interceptor.post_delete_operation(None) - - @property - def get_operation(self): - return self._GetOperation(self._session, self._host, self._interceptor) # type: ignore - - class _GetOperation(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.GetOperationRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - - r"""Call the get operation method over HTTP. - - Args: - request (operations_pb2.GetOperationRequest): - The request object for GetOperation method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - operations_pb2.Operation: Response from GetOperation method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations/*}', - }, - ] - - request, metadata = self._interceptor.pre_get_operation(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - resp = operations_pb2.Operation() - resp = json_format.Parse(response.content.decode("utf-8"), resp) - resp = self._interceptor.post_get_operation(resp) - return resp - - @property - def list_operations(self): - return self._ListOperations(self._session, self._host, self._interceptor) # type: ignore - - class _ListOperations(SecurityCenterRestStub): - def __call__(self, - request: operations_pb2.ListOperationsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.ListOperationsResponse: - - r"""Call the list operations method over HTTP. - - Args: - request (operations_pb2.ListOperationsRequest): - The request object for ListOperations method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - operations_pb2.ListOperationsResponse: Response from ListOperations method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1/{name=organizations/*/operations}', - }, - ] - - request, metadata = self._interceptor.pre_list_operations(request, metadata) - request_kwargs = json_format.MessageToDict(request) - transcoded_request = path_template.transcode( - http_options, **request_kwargs) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json.dumps(transcoded_request['query_params'])) - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - resp = operations_pb2.ListOperationsResponse() - resp = json_format.Parse(response.content.decode("utf-8"), resp) - resp = self._interceptor.post_list_operations(resp) - return resp - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py deleted file mode 100644 index 3b48f777..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/__init__.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- 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. -# -from .access import ( - Access, - Geolocation, - ServiceAccountDelegationInfo, -) -from .asset import ( - Asset, -) -from .bigquery_export import ( - BigQueryExport, -) -from .compliance import ( - Compliance, -) -from .connection import ( - Connection, -) -from .contact_details import ( - Contact, - ContactDetails, -) -from .container import ( - Container, -) -from .database import ( - Database, -) -from .effective_security_health_analytics_custom_module import ( - EffectiveSecurityHealthAnalyticsCustomModule, -) -from .exfiltration import ( - ExfilResource, - Exfiltration, -) -from .external_system import ( - ExternalSystem, -) -from .file import ( - File, -) -from .finding import ( - Finding, -) -from .folder import ( - Folder, -) -from .iam_binding import ( - IamBinding, -) -from .indicator import ( - Indicator, -) -from .kernel_rootkit import ( - KernelRootkit, -) -from .kubernetes import ( - Kubernetes, -) -from .label import ( - Label, -) -from .mitre_attack import ( - MitreAttack, -) -from .mute_config import ( - MuteConfig, -) -from .notification_config import ( - NotificationConfig, -) -from .notification_message import ( - NotificationMessage, -) -from .organization_settings import ( - OrganizationSettings, -) -from .process import ( - EnvironmentVariable, - Process, -) -from .resource import ( - Resource, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_health_analytics_custom_config import ( - CustomConfig, -) -from .security_health_analytics_custom_module import ( - SecurityHealthAnalyticsCustomModule, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - BulkMuteFindingsRequest, - BulkMuteFindingsResponse, - CreateBigQueryExportRequest, - CreateFindingRequest, - CreateMuteConfigRequest, - CreateNotificationConfigRequest, - CreateSecurityHealthAnalyticsCustomModuleRequest, - CreateSourceRequest, - DeleteBigQueryExportRequest, - DeleteMuteConfigRequest, - DeleteNotificationConfigRequest, - DeleteSecurityHealthAnalyticsCustomModuleRequest, - GetBigQueryExportRequest, - GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - GetMuteConfigRequest, - GetNotificationConfigRequest, - GetOrganizationSettingsRequest, - GetSecurityHealthAnalyticsCustomModuleRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListBigQueryExportsRequest, - ListBigQueryExportsResponse, - ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - ListDescendantSecurityHealthAnalyticsCustomModulesResponse, - ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - ListEffectiveSecurityHealthAnalyticsCustomModulesResponse, - ListFindingsRequest, - ListFindingsResponse, - ListMuteConfigsRequest, - ListMuteConfigsResponse, - ListNotificationConfigsRequest, - ListNotificationConfigsResponse, - ListSecurityHealthAnalyticsCustomModulesRequest, - ListSecurityHealthAnalyticsCustomModulesResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - SetMuteRequest, - UpdateBigQueryExportRequest, - UpdateExternalSystemRequest, - UpdateFindingRequest, - UpdateMuteConfigRequest, - UpdateNotificationConfigRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityHealthAnalyticsCustomModuleRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) -from .vulnerability import ( - Cve, - Cvssv3, - Reference, - Vulnerability, -) - -__all__ = ( - 'Access', - 'Geolocation', - 'ServiceAccountDelegationInfo', - 'Asset', - 'BigQueryExport', - 'Compliance', - 'Connection', - 'Contact', - 'ContactDetails', - 'Container', - 'Database', - 'EffectiveSecurityHealthAnalyticsCustomModule', - 'ExfilResource', - 'Exfiltration', - 'ExternalSystem', - 'File', - 'Finding', - 'Folder', - 'IamBinding', - 'Indicator', - 'KernelRootkit', - 'Kubernetes', - 'Label', - 'MitreAttack', - 'MuteConfig', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'EnvironmentVariable', - 'Process', - 'Resource', - 'RunAssetDiscoveryResponse', - 'CustomConfig', - 'SecurityHealthAnalyticsCustomModule', - 'SecurityMarks', - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateBigQueryExportRequest', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteBigQueryExportRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'UpdateBigQueryExportRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', - 'Cve', - 'Cvssv3', - 'Reference', - 'Vulnerability', -) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py deleted file mode 100644 index 40e3c27a..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/access.py +++ /dev/null @@ -1,190 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Access', - 'ServiceAccountDelegationInfo', - 'Geolocation', - }, -) - - -class Access(proto.Message): - r"""Represents an access event. - - Attributes: - principal_email (str): - Associated email, such as "foo@google.com". - - The email address of the authenticated user (or service - account on behalf of third party principal) making the - request. For third party identity callers, the - ``principal_subject`` field is populated instead of this - field. For privacy reasons, the principal email address is - sometimes redacted. For more information, see `Caller - identities in audit - logs `__. - caller_ip (str): - Caller's IP address, such as "1.1.1.1". - caller_ip_geo (google.cloud.securitycenter_v1.types.Geolocation): - The caller IP's geolocation, which identifies - where the call came from. - user_agent_family (str): - What kind of user agent is associated, for - example operating system shells, embedded or - stand-alone applications, etc. - service_name (str): - This is the API service that the service - account made a call to, e.g. - "iam.googleapis.com". - method_name (str): - The method that the service account called, - e.g. "SetIamPolicy". - principal_subject (str): - A string representing the principal_subject associated with - the identity. As compared to ``principal_email``, supports - principals that aren't associated with email addresses, such - as third party principals. For most identities, the format - will be - ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` - except for some GKE identities (GKE_WORKLOAD, FREEFORM, - GKE_HUB_WORKLOAD) that are still in the legacy format - ``serviceAccount:{identity pool name}[{subject}]`` - service_account_key_name (str): - The name of the service account key used to create or - exchange credentials for authenticating the service account - making the request. This is a scheme-less URI full resource - name. For example: - - "//iam.googleapis.com/projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{key}". - service_account_delegation_info (MutableSequence[google.cloud.securitycenter_v1.types.ServiceAccountDelegationInfo]): - Identity delegation history of an - authenticated service account that makes the - request. It contains information on the real - authorities that try to access GCP resources by - delegating on a service account. When multiple - authorities are present, they are guaranteed to - be sorted based on the original ordering of the - identity delegation events. - user_name (str): - A string that represents the username of a - user, user account, or other entity involved in - the access event. What the entity is and what - its role in the access event is depends on the - finding that this field appears in. The entity - is likely not an IAM principal, but could be a - user that is logged into an operating system, if - the finding is VM-related, or a user that is - logged into some type of application that is - involved in the access event. - """ - - principal_email: str = proto.Field( - proto.STRING, - number=1, - ) - caller_ip: str = proto.Field( - proto.STRING, - number=2, - ) - caller_ip_geo: 'Geolocation' = proto.Field( - proto.MESSAGE, - number=3, - message='Geolocation', - ) - user_agent_family: str = proto.Field( - proto.STRING, - number=4, - ) - service_name: str = proto.Field( - proto.STRING, - number=5, - ) - method_name: str = proto.Field( - proto.STRING, - number=6, - ) - principal_subject: str = proto.Field( - proto.STRING, - number=7, - ) - service_account_key_name: str = proto.Field( - proto.STRING, - number=8, - ) - service_account_delegation_info: MutableSequence['ServiceAccountDelegationInfo'] = proto.RepeatedField( - proto.MESSAGE, - number=9, - message='ServiceAccountDelegationInfo', - ) - user_name: str = proto.Field( - proto.STRING, - number=11, - ) - - -class ServiceAccountDelegationInfo(proto.Message): - r"""Identity delegation history of an authenticated service - account. - - Attributes: - principal_email (str): - The email address of a Google account. - principal_subject (str): - A string representing the principal_subject associated with - the identity. As compared to ``principal_email``, supports - principals that aren't associated with email addresses, such - as third party principals. For most identities, the format - will be - ``principal://iam.googleapis.com/{identity pool name}/subjects/{subject}`` - except for some GKE identities (GKE_WORKLOAD, FREEFORM, - GKE_HUB_WORKLOAD) that are still in the legacy format - ``serviceAccount:{identity pool name}[{subject}]`` - """ - - principal_email: str = proto.Field( - proto.STRING, - number=1, - ) - principal_subject: str = proto.Field( - proto.STRING, - number=2, - ) - - -class Geolocation(proto.Message): - r"""Represents a geographical location for a given access. - - Attributes: - region_code (str): - A CLDR. - """ - - region_code: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py deleted file mode 100644 index 711b24bc..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/asset.py +++ /dev/null @@ -1,227 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import folder -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated - or added in Cloud SCC. - iam_policy (google.cloud.securitycenter_v1.types.Asset.IamPolicy): - Cloud IAM Policy information associated with - the Google Cloud resource described by the - Security Command Center asset. This information - is managed and defined by the Google Cloud - resource and cannot be modified by the user. - canonical_name (str): - The canonical name of the resource. It's either - "organizations/{organization_id}/assets/{asset_id}", - "folders/{folder_id}/assets/{asset_id}" or - "projects/{project_number}/assets/{asset_id}", depending on - the closest CRM ancestor of the resource. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - The full resource name of the Google Cloud resource this - asset represents. This field is immutable after create time. - See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - resource_display_name (str): - The user defined display name for this - resource. - resource_parent_display_name (str): - The user defined display name for the parent - of this resource. - resource_project_display_name (str): - The user defined display name for the project - of this resource. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - resource_display_name: str = proto.Field( - proto.STRING, - number=6, - ) - resource_parent_display_name: str = proto.Field( - proto.STRING, - number=7, - ) - resource_project_display_name: str = proto.Field( - proto.STRING, - number=8, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - class IamPolicy(proto.Message): - r"""Cloud IAM Policy information associated with the Google Cloud - resource described by the Security Command Center asset. This - information is managed and defined by the Google Cloud resource - and cannot be modified by the user. - - Attributes: - policy_blob (str): - The JSON representation of the Policy - associated with the asset. See - https://cloud.google.com/iam/reference/rest/v1/Policy - for format details. - """ - - policy_blob: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - iam_policy: IamPolicy = proto.Field( - proto.MESSAGE, - number=11, - message=IamPolicy, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=13, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py deleted file mode 100644 index 357088a4..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/bigquery_export.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'BigQueryExport', - }, -) - - -class BigQueryExport(proto.Message): - r"""Configures how to deliver Findings to BigQuery Instance. - - Attributes: - name (str): - The relative resource name of this export. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name. - Example format: - "organizations/{organization_id}/bigQueryExports/{export_id}" - Example format: - "folders/{folder_id}/bigQueryExports/{export_id}" Example - format: "projects/{project_id}/bigQueryExports/{export_id}" - This field is provided in responses, and is ignored when - provided in create requests. - description (str): - The description of the export (max of 1024 - characters). - filter (str): - Expression that defines the filter to apply across - create/update events of findings. The expression is a list - of zero or more restrictions combined via logical operators - ``AND`` and ``OR``. Parentheses are supported, and ``OR`` - has higher precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - dataset (str): - The dataset to write findings' updates to. Its format is - "projects/[project_id]/datasets/[bigquery_dataset_id]". - BigQuery Dataset unique ID must contain only letters (a-z, - A-Z), numbers (0-9), or underscores (_). - create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the BigQuery - export was created. This field is set by the - server and will be ignored if provided on export - on creation. - update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time at which - the BigQuery export was updated. This field is - set by the server and will be ignored if - provided on export creation or update. - most_recent_editor (str): - Output only. Email address of the user who - last edited the BigQuery export. This field is - set by the server and will be ignored if - provided on export creation or update. - principal (str): - Output only. The service account that needs - permission to create table and upload data to - the BigQuery dataset. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - filter: str = proto.Field( - proto.STRING, - number=3, - ) - dataset: str = proto.Field( - proto.STRING, - number=4, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=6, - message=timestamp_pb2.Timestamp, - ) - most_recent_editor: str = proto.Field( - proto.STRING, - number=7, - ) - principal: str = proto.Field( - proto.STRING, - number=8, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py deleted file mode 100644 index a303fc76..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/compliance.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Compliance', - }, -) - - -class Compliance(proto.Message): - r"""Contains compliance information about a security standard - indicating unmet recommendations. - - Attributes: - standard (str): - Refers to industry wide standards or - benchmarks e.g. "cis", "pci", "owasp", etc. - version (str): - Version of the standard/benchmark e.g. 1.1 - ids (MutableSequence[str]): - Policies within the standard/benchmark e.g. - A.12.4.1 - """ - - standard: str = proto.Field( - proto.STRING, - number=1, - ) - version: str = proto.Field( - proto.STRING, - number=2, - ) - ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py deleted file mode 100644 index d3c78d28..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/connection.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Connection', - }, -) - - -class Connection(proto.Message): - r"""Contains information about the IP connection associated with - the finding. - - Attributes: - destination_ip (str): - Destination IP address. Not present for - sockets that are listening and not connected. - destination_port (int): - Destination port. Not present for sockets - that are listening and not connected. - source_ip (str): - Source IP address. - source_port (int): - Source port. - protocol (google.cloud.securitycenter_v1.types.Connection.Protocol): - IANA Internet Protocol Number such as TCP(6) - and UDP(17). - """ - class Protocol(proto.Enum): - r"""IANA Internet Protocol Number such as TCP(6) and UDP(17). - - Values: - PROTOCOL_UNSPECIFIED (0): - Unspecified protocol (not HOPOPT). - ICMP (1): - Internet Control Message Protocol. - TCP (6): - Transmission Control Protocol. - UDP (17): - User Datagram Protocol. - GRE (47): - Generic Routing Encapsulation. - ESP (50): - Encap Security Payload. - """ - PROTOCOL_UNSPECIFIED = 0 - ICMP = 1 - TCP = 6 - UDP = 17 - GRE = 47 - ESP = 50 - - destination_ip: str = proto.Field( - proto.STRING, - number=1, - ) - destination_port: int = proto.Field( - proto.INT32, - number=2, - ) - source_ip: str = proto.Field( - proto.STRING, - number=3, - ) - source_port: int = proto.Field( - proto.INT32, - number=4, - ) - protocol: Protocol = proto.Field( - proto.ENUM, - number=5, - enum=Protocol, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py deleted file mode 100644 index 1610ec13..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/contact_details.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'ContactDetails', - 'Contact', - }, -) - - -class ContactDetails(proto.Message): - r"""The details pertaining to specific contacts - - Attributes: - contacts (MutableSequence[google.cloud.securitycenter_v1.types.Contact]): - A list of contacts - """ - - contacts: MutableSequence['Contact'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='Contact', - ) - - -class Contact(proto.Message): - r"""The email address of a contact. - - Attributes: - email (str): - An email address. For example, "``person123@company.com``". - """ - - email: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py deleted file mode 100644 index fec5760b..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/container.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import label - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Container', - }, -) - - -class Container(proto.Message): - r"""Container associated with the finding. - - Attributes: - name (str): - Container name. - uri (str): - Container image URI provided when configuring - a pod/container. May identify a container image - version using mutable tags. - image_id (str): - Optional container image id, when provided by - the container runtime. Uniquely identifies the - container image launched using a container image - digest. - labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): - Container labels, as provided by the - container runtime. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - uri: str = proto.Field( - proto.STRING, - number=2, - ) - image_id: str = proto.Field( - proto.STRING, - number=3, - ) - labels: MutableSequence[label.Label] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=label.Label, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py deleted file mode 100644 index ba22beb7..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/database.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Database', - }, -) - - -class Database(proto.Message): - r"""Represents database access information, such as queries. - A database may be a sub-resource of an instance (as in the case - of CloudSQL instances or Cloud Spanner instances), or the - database instance itself. Some database resources may not have - the full resource name populated because these resource types - are not yet supported by Cloud Asset Inventory (e.g. CloudSQL - databases). In these cases only the display name will be - provided. - - Attributes: - name (str): - The full resource name of the database the - user connected to, if it is supported by CAI. - (https://google.aip.dev/122#full-resource-names) - display_name (str): - The human readable name of the database the - user connected to. - user_name (str): - The username used to connect to the DB. This - may not necessarily be an IAM principal, and has - no required format. - query (str): - The SQL statement associated with the - relevant access. - grantees (MutableSequence[str]): - The target usernames/roles/groups of a SQL - privilege grant (not an IAM policy change). - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - user_name: str = proto.Field( - proto.STRING, - number=3, - ) - query: str = proto.Field( - proto.STRING, - number=4, - ) - grantees: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py deleted file mode 100644 index 17370e15..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/exfiltration.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Exfiltration', - 'ExfilResource', - }, -) - - -class Exfiltration(proto.Message): - r"""Exfiltration represents a data exfiltration attempt of one or - more sources to one or more targets. Sources represent the - source of data that is exfiltrated, and Targets represents the - destination the data was copied to. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): - If there are multiple sources, then the data - is considered "joined" between them. For - instance, BigQuery can join multiple tables, and - each table would be considered a source. - targets (MutableSequence[google.cloud.securitycenter_v1.types.ExfilResource]): - If there are multiple targets, each target - would get a complete copy of the "joined" source - data. - """ - - sources: MutableSequence['ExfilResource'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='ExfilResource', - ) - targets: MutableSequence['ExfilResource'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='ExfilResource', - ) - - -class ExfilResource(proto.Message): - r"""Resource that has been exfiltrated or exfiltrated_to. - - Attributes: - name (str): - Resource's URI - (https://google.aip.dev/122#full-resource-names) - components (MutableSequence[str]): - Subcomponents of the asset that is - exfiltrated - these could be URIs used during - exfiltration, table names, databases, filenames, - etc. For example, multiple tables may be - exfiltrated from the same CloudSQL instance, or - multiple files from the same Cloud Storage - bucket. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - components: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py deleted file mode 100644 index 809485f6..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/external_system.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'ExternalSystem', - }, -) - - -class ExternalSystem(proto.Message): - r"""Representation of third party SIEM/SOAR fields within SCC. - - Attributes: - name (str): - Full resource name of the external system, - for example: - "organizations/1234/sources/5678/findings/123456/externalSystems/jira", - "folders/1234/sources/5678/findings/123456/externalSystems/jira", - "projects/1234/sources/5678/findings/123456/externalSystems/jira". - assignees (MutableSequence[str]): - References primary/secondary etc assignees in - the external system. - external_uid (str): - Identifier that's used to track the given - finding in the external system. - status (str): - Most recent status of the corresponding - finding's ticket/tracker in the external system. - external_system_update_time (google.protobuf.timestamp_pb2.Timestamp): - The most recent time when the corresponding - finding's ticket/tracker was updated in the - external system. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - assignees: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - external_uid: str = proto.Field( - proto.STRING, - number=3, - ) - status: str = proto.Field( - proto.STRING, - number=4, - ) - external_system_update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py deleted file mode 100644 index 828b3580..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/file.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'File', - }, -) - - -class File(proto.Message): - r"""File information about the related binary/library used by an - executable, or the script used by a script interpreter - - Attributes: - path (str): - Absolute path of the file as a JSON encoded - string. - size (int): - Size of the file in bytes. - sha256 (str): - SHA256 hash of the first hashed_size bytes of the file - encoded as a hex string. If hashed_size == size, sha256 - represents the SHA256 hash of the entire file. - hashed_size (int): - The length in bytes of the file prefix that was hashed. If - hashed_size == size, any hashes reported represent the - entire file. - partially_hashed (bool): - True when the hash covers only a prefix of - the file. - contents (str): - Prefix of the file contents as a JSON encoded - string. (Currently only populated for Malicious - Script Executed findings.) - """ - - path: str = proto.Field( - proto.STRING, - number=1, - ) - size: int = proto.Field( - proto.INT64, - number=2, - ) - sha256: str = proto.Field( - proto.STRING, - number=3, - ) - hashed_size: int = proto.Field( - proto.INT64, - number=4, - ) - partially_hashed: bool = proto.Field( - proto.BOOL, - number=5, - ) - contents: str = proto.Field( - proto.STRING, - number=6, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py deleted file mode 100644 index a636b2ac..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/finding.py +++ /dev/null @@ -1,542 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import access as gcs_access -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import contact_details -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database as gcs_database -from google.cloud.securitycenter_v1.types import exfiltration as gcs_exfiltration -from google.cloud.securitycenter_v1.types import external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator as gcs_indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit as gcs_kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes as gcs_kubernetes -from google.cloud.securitycenter_v1.types import mitre_attack as gcs_mitre_attack -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import vulnerability as gcs_vulnerability -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data like security, risk, - health, or privacy, that is ingested into Security Command - Center for presentation, notification, analysis, policy testing, - and enforcement. For example, a cross-site scripting (XSS) - vulnerability in an App Engine application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - The relative resource name of the source the finding belongs - to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time the finding was first detected. If - an existing finding is updated, then this is the - time the update occurred. For example, if the - finding represents an open firewall, this - property captures the time the detector believes - the firewall became open. The accuracy is - determined by the detector. If the finding is - later resolved, then this time reflects when the - finding was resolved. This must not be set to a - value greater than the current timestamp. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - severity (google.cloud.securitycenter_v1.types.Finding.Severity): - The severity of the finding. This field is - managed by the source that writes the finding. - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" - or - "projects/{project_number}/sources/{source_id}/findings/{finding_id}", - depending on the closest CRM ancestor of the resource - associated with the finding. - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Indicates the mute state of a finding (either - muted, unmuted or undefined). Unlike other - attributes of a finding, a finding provider - shouldn't set the value of mute. - finding_class (google.cloud.securitycenter_v1.types.Finding.FindingClass): - The class of the finding. - indicator (google.cloud.securitycenter_v1.types.Indicator): - Represents what's commonly known as an Indicator of - compromise (IoC) in computer forensics. This is an artifact - observed on a network or in an operating system that, with - high confidence, indicates a computer intrusion. Reference: - https://en.wikipedia.org/wiki/Indicator_of_compromise - vulnerability (google.cloud.securitycenter_v1.types.Vulnerability): - Represents vulnerability-specific fields like - CVE and CVSS scores. CVE stands for Common - Vulnerabilities and Exposures - (https://cve.mitre.org/about/) - mute_update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time this - finding was muted or unmuted. - external_systems (MutableMapping[str, google.cloud.securitycenter_v1.types.ExternalSystem]): - Output only. Third party SIEM/SOAR fields - within SCC, contains external system information - and external system finding fields. - mitre_attack (google.cloud.securitycenter_v1.types.MitreAttack): - MITRE ATT&CK tactics and techniques related - to this finding. See: https://attack.mitre.org - access (google.cloud.securitycenter_v1.types.Access): - Access details associated to the Finding, - such as more information on the caller, which - method was accessed, from where, etc. - connections (MutableSequence[google.cloud.securitycenter_v1.types.Connection]): - Contains information about the IP connection - associated with the finding. - mute_initiator (str): - First known as mute_annotation. Records additional - information about the mute operation e.g. mute config that - muted the finding, user who muted the finding, etc. Unlike - other attributes of a finding, a finding provider shouldn't - set the value of mute. - processes (MutableSequence[google.cloud.securitycenter_v1.types.Process]): - Represents operating system processes - associated with the Finding. - contacts (MutableMapping[str, google.cloud.securitycenter_v1.types.ContactDetails]): - Output only. Map containing the points of contact for the - given finding. The key represents the type of contact, while - the value contains a list of all the contacts that pertain. - Please refer to: - https://cloud.google.com/resource-manager/docs/managing-notification-contacts#notification-categories - - :: - - { - "security": { - "contacts": [ - { - "email": "person1@company.com" - }, - { - "email": "person2@company.com" - } - ] - } - } - compliances (MutableSequence[google.cloud.securitycenter_v1.types.Compliance]): - Contains compliance information for security - standards associated to the finding. - parent_display_name (str): - Output only. The human readable display name - of the finding source such as "Event Threat - Detection" or "Security Health Analytics". - description (str): - Contains more detail about the finding. - exfiltration (google.cloud.securitycenter_v1.types.Exfiltration): - Represents exfiltration associated with the - Finding. - iam_bindings (MutableSequence[google.cloud.securitycenter_v1.types.IamBinding]): - Represents IAM bindings associated with the - Finding. - next_steps (str): - Next steps associate to the finding. - module_name (str): - Unique identifier of the module which - generated the finding. Example: - folders/598186756061/securityHealthAnalyticsSettings/customModules/56799441161885 - containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): - Containers associated with the finding. - containers provides information for both - Kubernetes and non-Kubernetes containers. - kubernetes (google.cloud.securitycenter_v1.types.Kubernetes): - Kubernetes resources associated with the - finding. - database (google.cloud.securitycenter_v1.types.Database): - Database associated with the finding. - files (MutableSequence[google.cloud.securitycenter_v1.types.File]): - File associated with the finding. - kernel_rootkit (google.cloud.securitycenter_v1.types.KernelRootkit): - Kernel Rootkit signature. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - class Severity(proto.Enum): - r"""The severity of the finding. - - Values: - SEVERITY_UNSPECIFIED (0): - This value is used for findings when a source - doesn't write a severity value. - CRITICAL (1): - Vulnerability: - A critical vulnerability is easily discoverable - by an external actor, exploitable, and results - in the direct ability to execute arbitrary code, - exfiltrate data, and otherwise gain additional - access and privileges to cloud resources and - workloads. Examples include publicly accessible - unprotected user data, public SSH access with - weak or no passwords, etc. - Threat: - Indicates a threat that is able to access, - modify, or delete data or execute unauthorized - code within existing resources. - HIGH (2): - Vulnerability: - A high risk vulnerability can be easily - discovered and exploited in combination with - other vulnerabilities in order to gain direct - access and the ability to execute arbitrary - code, exfiltrate data, and otherwise gain - additional access and privileges to cloud - resources and workloads. An example is a - database with weak or no passwords that is only - accessible internally. This database could - easily be compromised by an actor that had - access to the internal network. - Threat: - Indicates a threat that is able to create new - computational resources in an environment but - not able to access data or execute code in - existing resources. - MEDIUM (3): - Vulnerability: - A medium risk vulnerability could be used by an - actor to gain access to resources or privileges - that enable them to eventually (through multiple - steps or a complex exploit) gain access and the - ability to execute arbitrary code or exfiltrate - data. An example is a service account with - access to more projects than it should have. If - an actor gains access to the service account, - they could potentially use that access to - manipulate a project the service account was not - intended to. - Threat: - Indicates a threat that is able to cause - operational impact but may not access data or - execute unauthorized code. - LOW (4): - Vulnerability: - A low risk vulnerability hampers a security - organization's ability to detect vulnerabilities - or active threats in their deployment, or - prevents the root cause investigation of - security issues. An example is monitoring and - logs being disabled for resource configurations - and access. - Threat: - Indicates a threat that has obtained minimal - access to an environment but is not able to - access data, execute code, or create resources. - """ - SEVERITY_UNSPECIFIED = 0 - CRITICAL = 1 - HIGH = 2 - MEDIUM = 3 - LOW = 4 - - class Mute(proto.Enum): - r"""Mute state a finding can be in. - - Values: - MUTE_UNSPECIFIED (0): - Unspecified. - MUTED (1): - Finding has been muted. - UNMUTED (2): - Finding has been unmuted. - UNDEFINED (4): - Finding has never been muted/unmuted. - """ - MUTE_UNSPECIFIED = 0 - MUTED = 1 - UNMUTED = 2 - UNDEFINED = 4 - - class FindingClass(proto.Enum): - r"""Represents what kind of Finding it is. - - Values: - FINDING_CLASS_UNSPECIFIED (0): - Unspecified finding class. - THREAT (1): - Describes unwanted or malicious activity. - VULNERABILITY (2): - Describes a potential weakness in software - that increases risk to Confidentiality & - Integrity & Availability. - MISCONFIGURATION (3): - Describes a potential weakness in cloud - resource/asset configuration that increases - risk. - OBSERVATION (4): - Describes a security observation that is for - informational purposes. - SCC_ERROR (5): - Describes an error that prevents some SCC - functionality. - """ - FINDING_CLASS_UNSPECIFIED = 0 - THREAT = 1 - VULNERABILITY = 2 - MISCONFIGURATION = 3 - OBSERVATION = 4 - SCC_ERROR = 5 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - severity: Severity = proto.Field( - proto.ENUM, - number=12, - enum=Severity, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - mute: Mute = proto.Field( - proto.ENUM, - number=15, - enum=Mute, - ) - finding_class: FindingClass = proto.Field( - proto.ENUM, - number=17, - enum=FindingClass, - ) - indicator: gcs_indicator.Indicator = proto.Field( - proto.MESSAGE, - number=18, - message=gcs_indicator.Indicator, - ) - vulnerability: gcs_vulnerability.Vulnerability = proto.Field( - proto.MESSAGE, - number=20, - message=gcs_vulnerability.Vulnerability, - ) - mute_update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=21, - message=timestamp_pb2.Timestamp, - ) - external_systems: MutableMapping[str, external_system.ExternalSystem] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=22, - message=external_system.ExternalSystem, - ) - mitre_attack: gcs_mitre_attack.MitreAttack = proto.Field( - proto.MESSAGE, - number=25, - message=gcs_mitre_attack.MitreAttack, - ) - access: gcs_access.Access = proto.Field( - proto.MESSAGE, - number=26, - message=gcs_access.Access, - ) - connections: MutableSequence[connection.Connection] = proto.RepeatedField( - proto.MESSAGE, - number=31, - message=connection.Connection, - ) - mute_initiator: str = proto.Field( - proto.STRING, - number=28, - ) - processes: MutableSequence[process.Process] = proto.RepeatedField( - proto.MESSAGE, - number=30, - message=process.Process, - ) - contacts: MutableMapping[str, contact_details.ContactDetails] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=33, - message=contact_details.ContactDetails, - ) - compliances: MutableSequence[compliance.Compliance] = proto.RepeatedField( - proto.MESSAGE, - number=34, - message=compliance.Compliance, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=36, - ) - description: str = proto.Field( - proto.STRING, - number=37, - ) - exfiltration: gcs_exfiltration.Exfiltration = proto.Field( - proto.MESSAGE, - number=38, - message=gcs_exfiltration.Exfiltration, - ) - iam_bindings: MutableSequence[iam_binding.IamBinding] = proto.RepeatedField( - proto.MESSAGE, - number=39, - message=iam_binding.IamBinding, - ) - next_steps: str = proto.Field( - proto.STRING, - number=40, - ) - module_name: str = proto.Field( - proto.STRING, - number=41, - ) - containers: MutableSequence[container.Container] = proto.RepeatedField( - proto.MESSAGE, - number=42, - message=container.Container, - ) - kubernetes: gcs_kubernetes.Kubernetes = proto.Field( - proto.MESSAGE, - number=43, - message=gcs_kubernetes.Kubernetes, - ) - database: gcs_database.Database = proto.Field( - proto.MESSAGE, - number=44, - message=gcs_database.Database, - ) - files: MutableSequence[file.File] = proto.RepeatedField( - proto.MESSAGE, - number=46, - message=file.File, - ) - kernel_rootkit: gcs_kernel_rootkit.KernelRootkit = proto.Field( - proto.MESSAGE, - number=50, - message=gcs_kernel_rootkit.KernelRootkit, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py deleted file mode 100644 index 06616e56..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/folder.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Folder', - }, -) - - -class Folder(proto.Message): - r"""Message that contains the resource name and display name of a - folder resource. - - Attributes: - resource_folder (str): - Full resource name of this folder. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_folder_display_name (str): - The user defined display name for this - folder. - """ - - resource_folder: str = proto.Field( - proto.STRING, - number=1, - ) - resource_folder_display_name: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py deleted file mode 100644 index e03e9044..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/iam_binding.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'IamBinding', - }, -) - - -class IamBinding(proto.Message): - r"""Represents a particular IAM binding, which captures a - member's role addition, removal, or state. - - Attributes: - action (google.cloud.securitycenter_v1.types.IamBinding.Action): - The action that was performed on a Binding. - role (str): - Role that is assigned to "members". - For example, "roles/viewer", "roles/editor", or - "roles/owner". - member (str): - A single identity requesting access for a - Cloud Platform resource, e.g. "foo@google.com". - """ - class Action(proto.Enum): - r"""The type of action performed on a Binding in a policy. - - Values: - ACTION_UNSPECIFIED (0): - Unspecified. - ADD (1): - Addition of a Binding. - REMOVE (2): - Removal of a Binding. - """ - ACTION_UNSPECIFIED = 0 - ADD = 1 - REMOVE = 2 - - action: Action = proto.Field( - proto.ENUM, - number=1, - enum=Action, - ) - role: str = proto.Field( - proto.STRING, - number=2, - ) - member: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py deleted file mode 100644 index 13bfe863..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/indicator.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Indicator', - }, -) - - -class Indicator(proto.Message): - r"""Represents what's commonly known as an *indicator of compromise* - (IoC) in computer forensics. This is an artifact observed on a - network or in an operating system that, with high confidence, - indicates a computer intrusion. For more information, see `Indicator - of - compromise `__. - - Attributes: - ip_addresses (MutableSequence[str]): - The list of IP addresses that are associated - with the finding. - domains (MutableSequence[str]): - List of domains associated to the Finding. - signatures (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature]): - The list of matched signatures indicating - that the given process is present in the - environment. - uris (MutableSequence[str]): - The list of URIs associated to the Findings. - """ - - class ProcessSignature(proto.Message): - r"""Indicates what signature matched this process. - - This message has `oneof`_ fields (mutually exclusive fields). - For each oneof, at most one member field can be set at the same time. - Setting any member of the oneof automatically clears all other - members. - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - memory_hash_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature): - Signature indicating that a binary family was - matched. - - This field is a member of `oneof`_ ``signature``. - yara_rule_signature (google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.YaraRuleSignature): - Signature indicating that a YARA rule was - matched. - - This field is a member of `oneof`_ ``signature``. - """ - - class MemoryHashSignature(proto.Message): - r"""A signature corresponding to memory page hashes. - - Attributes: - binary_family (str): - The binary family. - detections (MutableSequence[google.cloud.securitycenter_v1.types.Indicator.ProcessSignature.MemoryHashSignature.Detection]): - The list of memory hash detections - contributing to the binary family match. - """ - - class Detection(proto.Message): - r"""Memory hash detection contributing to the binary family - match. - - Attributes: - binary (str): - The name of the binary associated with the - memory hash signature detection. - percent_pages_matched (float): - The percentage of memory page hashes in the - signature that were matched. - """ - - binary: str = proto.Field( - proto.STRING, - number=2, - ) - percent_pages_matched: float = proto.Field( - proto.DOUBLE, - number=3, - ) - - binary_family: str = proto.Field( - proto.STRING, - number=1, - ) - detections: MutableSequence['Indicator.ProcessSignature.MemoryHashSignature.Detection'] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message='Indicator.ProcessSignature.MemoryHashSignature.Detection', - ) - - class YaraRuleSignature(proto.Message): - r"""A signature corresponding to a YARA rule. - - Attributes: - yara_rule (str): - The name of the YARA rule. - """ - - yara_rule: str = proto.Field( - proto.STRING, - number=5, - ) - - memory_hash_signature: 'Indicator.ProcessSignature.MemoryHashSignature' = proto.Field( - proto.MESSAGE, - number=6, - oneof='signature', - message='Indicator.ProcessSignature.MemoryHashSignature', - ) - yara_rule_signature: 'Indicator.ProcessSignature.YaraRuleSignature' = proto.Field( - proto.MESSAGE, - number=7, - oneof='signature', - message='Indicator.ProcessSignature.YaraRuleSignature', - ) - - ip_addresses: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - domains: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=2, - ) - signatures: MutableSequence[ProcessSignature] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=ProcessSignature, - ) - uris: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=4, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py deleted file mode 100644 index 1d8bd124..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kernel_rootkit.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'KernelRootkit', - }, -) - - -class KernelRootkit(proto.Message): - r"""Kernel mode rootkit signatures. - - Attributes: - name (str): - Rootkit name when available. - unexpected_code_modification (bool): - True when unexpected modifications of kernel - code memory are present. - unexpected_read_only_data_modification (bool): - True when unexpected modifications of kernel - read-only data memory are present. - unexpected_ftrace_handler (bool): - True when ``ftrace`` points are present with callbacks - pointing to regions that are not in the expected kernel or - module code range. - unexpected_kprobe_handler (bool): - True when ``kprobe`` points are present with callbacks - pointing to regions that are not in the expected kernel or - module code range. - unexpected_kernel_code_pages (bool): - True when kernel code pages that are not in - the expected kernel or module code regions are - present. - unexpected_system_call_handler (bool): - True when system call handlers that are are - not in the expected kernel or module code - regions are present. - unexpected_interrupt_handler (bool): - True when interrupt handlers that are are not - in the expected kernel or module code regions - are present. - unexpected_processes_in_runqueue (bool): - True when unexpected processes in the - scheduler run queue are present. Such processes - are in the run queue, but not in the process - task list. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - unexpected_code_modification: bool = proto.Field( - proto.BOOL, - number=2, - ) - unexpected_read_only_data_modification: bool = proto.Field( - proto.BOOL, - number=3, - ) - unexpected_ftrace_handler: bool = proto.Field( - proto.BOOL, - number=4, - ) - unexpected_kprobe_handler: bool = proto.Field( - proto.BOOL, - number=5, - ) - unexpected_kernel_code_pages: bool = proto.Field( - proto.BOOL, - number=6, - ) - unexpected_system_call_handler: bool = proto.Field( - proto.BOOL, - number=7, - ) - unexpected_interrupt_handler: bool = proto.Field( - proto.BOOL, - number=8, - ) - unexpected_processes_in_runqueue: bool = proto.Field( - proto.BOOL, - number=9, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py deleted file mode 100644 index 98071521..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/kubernetes.py +++ /dev/null @@ -1,338 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import label - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Kubernetes', - }, -) - - -class Kubernetes(proto.Message): - r"""Kubernetes-related attributes. - - Attributes: - pods (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Pod]): - Kubernetes Pods associated with the finding. - This field will contain Pod records for each - container that is owned by a Pod. - nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): - Provides Kubernetes Node information. - node_pools (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.NodePool]): - GKE Node Pools associated with the finding. - This field will contain NodePool information for - each Node, when it is available. - roles (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Role]): - Provides Kubernetes role information for - findings that involve Roles or ClusterRoles. - bindings (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Binding]): - Provides Kubernetes role binding information - for findings that involve RoleBindings or - ClusterRoleBindings. - access_reviews (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.AccessReview]): - Provides information on any Kubernetes access - reviews (i.e. privilege checks) relevant to the - finding. - """ - - class Pod(proto.Message): - r"""Kubernetes Pod. - - Attributes: - ns (str): - Kubernetes Pod namespace. - name (str): - Kubernetes Pod name. - labels (MutableSequence[google.cloud.securitycenter_v1.types.Label]): - Pod labels. For Kubernetes containers, these - are applied to the container. - containers (MutableSequence[google.cloud.securitycenter_v1.types.Container]): - Pod containers associated with this finding, - if any. - """ - - ns: str = proto.Field( - proto.STRING, - number=1, - ) - name: str = proto.Field( - proto.STRING, - number=2, - ) - labels: MutableSequence[label.Label] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=label.Label, - ) - containers: MutableSequence[container.Container] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=container.Container, - ) - - class Node(proto.Message): - r"""Kubernetes Nodes associated with the finding. - - Attributes: - name (str): - Full Resource name of the Compute Engine VM - running the cluster node. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - class NodePool(proto.Message): - r"""Provides GKE Node Pool information. - - Attributes: - name (str): - Kubernetes Node pool name. - nodes (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Node]): - Nodes associated with the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - nodes: MutableSequence['Kubernetes.Node'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='Kubernetes.Node', - ) - - class Role(proto.Message): - r"""Kubernetes Role or ClusterRole. - - Attributes: - kind (google.cloud.securitycenter_v1.types.Kubernetes.Role.Kind): - Role type. - ns (str): - Role namespace. - name (str): - Role name. - """ - class Kind(proto.Enum): - r"""Types of Kubernetes roles. - - Values: - KIND_UNSPECIFIED (0): - Role type is not specified. - ROLE (1): - Kubernetes Role. - CLUSTER_ROLE (2): - Kubernetes ClusterRole. - """ - KIND_UNSPECIFIED = 0 - ROLE = 1 - CLUSTER_ROLE = 2 - - kind: 'Kubernetes.Role.Kind' = proto.Field( - proto.ENUM, - number=1, - enum='Kubernetes.Role.Kind', - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - - class Binding(proto.Message): - r"""Represents a Kubernetes RoleBinding or ClusterRoleBinding. - - Attributes: - ns (str): - Namespace for binding. - name (str): - Name for binding. - role (google.cloud.securitycenter_v1.types.Kubernetes.Role): - The Role or ClusterRole referenced by the - binding. - subjects (MutableSequence[google.cloud.securitycenter_v1.types.Kubernetes.Subject]): - Represents one or more subjects that are - bound to the role. Not always available for - PATCH requests. - """ - - ns: str = proto.Field( - proto.STRING, - number=1, - ) - name: str = proto.Field( - proto.STRING, - number=2, - ) - role: 'Kubernetes.Role' = proto.Field( - proto.MESSAGE, - number=3, - message='Kubernetes.Role', - ) - subjects: MutableSequence['Kubernetes.Subject'] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message='Kubernetes.Subject', - ) - - class Subject(proto.Message): - r"""Represents a Kubernetes Subject. - - Attributes: - kind (google.cloud.securitycenter_v1.types.Kubernetes.Subject.AuthType): - Authentication type for subject. - ns (str): - Namespace for subject. - name (str): - Name for subject. - """ - class AuthType(proto.Enum): - r"""Auth types that can be used for Subject's kind field. - - Values: - AUTH_TYPE_UNSPECIFIED (0): - Authentication is not specified. - USER (1): - User with valid certificate. - SERVICEACCOUNT (2): - Users managed by Kubernetes API with - credentials stored as Secrets. - GROUP (3): - Collection of users. - """ - AUTH_TYPE_UNSPECIFIED = 0 - USER = 1 - SERVICEACCOUNT = 2 - GROUP = 3 - - kind: 'Kubernetes.Subject.AuthType' = proto.Field( - proto.ENUM, - number=1, - enum='Kubernetes.Subject.AuthType', - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - - class AccessReview(proto.Message): - r"""Conveys information about a Kubernetes access review (e.g. - kubectl auth can-i ...) that was involved in a finding. - - Attributes: - group (str): - Group is the API Group of the Resource. "*" means all. - ns (str): - Namespace of the action being requested. - Currently, there is no distinction between no - namespace and all namespaces. Both are - represented by "" (empty). - name (str): - Name is the name of the resource being - requested. Empty means all. - resource (str): - Resource is the optional resource type requested. "*" means - all. - subresource (str): - Subresource is the optional subresource type. - verb (str): - Verb is a Kubernetes resource API verb, like: get, list, - watch, create, update, delete, proxy. "*" means all. - version (str): - Version is the API Version of the Resource. "*" means all. - """ - - group: str = proto.Field( - proto.STRING, - number=1, - ) - ns: str = proto.Field( - proto.STRING, - number=2, - ) - name: str = proto.Field( - proto.STRING, - number=3, - ) - resource: str = proto.Field( - proto.STRING, - number=4, - ) - subresource: str = proto.Field( - proto.STRING, - number=5, - ) - verb: str = proto.Field( - proto.STRING, - number=6, - ) - version: str = proto.Field( - proto.STRING, - number=7, - ) - - pods: MutableSequence[Pod] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=Pod, - ) - nodes: MutableSequence[Node] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message=Node, - ) - node_pools: MutableSequence[NodePool] = proto.RepeatedField( - proto.MESSAGE, - number=3, - message=NodePool, - ) - roles: MutableSequence[Role] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=Role, - ) - bindings: MutableSequence[Binding] = proto.RepeatedField( - proto.MESSAGE, - number=5, - message=Binding, - ) - access_reviews: MutableSequence[AccessReview] = proto.RepeatedField( - proto.MESSAGE, - number=6, - message=AccessReview, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py deleted file mode 100644 index e2ef5ee3..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/label.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Label', - }, -) - - -class Label(proto.Message): - r"""Label represents a generic name=value label. Label has - separate name and value fields to support filtering with - contains(). - - Attributes: - name (str): - Label name. - value (str): - Label value. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - value: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py deleted file mode 100644 index 9b1bee93..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mitre_attack.py +++ /dev/null @@ -1,252 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'MitreAttack', - }, -) - - -class MitreAttack(proto.Message): - r"""MITRE ATT&CK tactics and techniques related to this finding. - See: https://attack.mitre.org - - Attributes: - primary_tactic (google.cloud.securitycenter_v1.types.MitreAttack.Tactic): - The MITRE ATT&CK tactic most closely - represented by this finding, if any. - primary_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): - The MITRE ATT&CK technique most closely represented by this - finding, if any. primary_techniques is a repeated field - because there are multiple levels of MITRE ATT&CK - techniques. If the technique most closely represented by - this finding is a sub-technique (e.g. - ``SCANNING_IP_BLOCKS``), both the sub-technique and its - parent technique(s) will be listed (e.g. - ``SCANNING_IP_BLOCKS``, ``ACTIVE_SCANNING``). - additional_tactics (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Tactic]): - Additional MITRE ATT&CK tactics related to - this finding, if any. - additional_techniques (MutableSequence[google.cloud.securitycenter_v1.types.MitreAttack.Technique]): - Additional MITRE ATT&CK techniques related to - this finding, if any, along with any of their - respective parent techniques. - version (str): - The MITRE ATT&CK version referenced by the - above fields. E.g. "8". - """ - class Tactic(proto.Enum): - r"""MITRE ATT&CK tactics that can be referenced by SCC findings. - See: https://attack.mitre.org/tactics/enterprise/ - - Values: - TACTIC_UNSPECIFIED (0): - Unspecified value. - RECONNAISSANCE (1): - TA0043 - RESOURCE_DEVELOPMENT (2): - TA0042 - INITIAL_ACCESS (5): - TA0001 - EXECUTION (3): - TA0002 - PERSISTENCE (6): - TA0003 - PRIVILEGE_ESCALATION (8): - TA0004 - DEFENSE_EVASION (7): - TA0005 - CREDENTIAL_ACCESS (9): - TA0006 - DISCOVERY (10): - TA0007 - LATERAL_MOVEMENT (11): - TA0008 - COLLECTION (12): - TA0009 - COMMAND_AND_CONTROL (4): - TA0011 - EXFILTRATION (13): - TA0010 - IMPACT (14): - TA0040 - """ - TACTIC_UNSPECIFIED = 0 - RECONNAISSANCE = 1 - RESOURCE_DEVELOPMENT = 2 - INITIAL_ACCESS = 5 - EXECUTION = 3 - PERSISTENCE = 6 - PRIVILEGE_ESCALATION = 8 - DEFENSE_EVASION = 7 - CREDENTIAL_ACCESS = 9 - DISCOVERY = 10 - LATERAL_MOVEMENT = 11 - COLLECTION = 12 - COMMAND_AND_CONTROL = 4 - EXFILTRATION = 13 - IMPACT = 14 - - class Technique(proto.Enum): - r"""MITRE ATT&CK techniques that can be referenced by SCC - findings. See: https://attack.mitre.org/techniques/enterprise/ - - Values: - TECHNIQUE_UNSPECIFIED (0): - Unspecified value. - ACTIVE_SCANNING (1): - T1595 - SCANNING_IP_BLOCKS (2): - T1595.001 - INGRESS_TOOL_TRANSFER (3): - T1105 - NATIVE_API (4): - T1106 - SHARED_MODULES (5): - T1129 - COMMAND_AND_SCRIPTING_INTERPRETER (6): - T1059 - UNIX_SHELL (7): - T1059.004 - RESOURCE_HIJACKING (8): - T1496 - PROXY (9): - T1090 - EXTERNAL_PROXY (10): - T1090.002 - MULTI_HOP_PROXY (11): - T1090.003 - DYNAMIC_RESOLUTION (12): - T1568 - UNSECURED_CREDENTIALS (13): - T1552 - VALID_ACCOUNTS (14): - T1078 - LOCAL_ACCOUNTS (15): - T1078.003 - CLOUD_ACCOUNTS (16): - T1078.004 - NETWORK_DENIAL_OF_SERVICE (17): - T1498 - PERMISSION_GROUPS_DISCOVERY (18): - T1069 - CLOUD_GROUPS (19): - T1069.003 - EXFILTRATION_OVER_WEB_SERVICE (20): - T1567 - EXFILTRATION_TO_CLOUD_STORAGE (21): - T1567.002 - ACCOUNT_MANIPULATION (22): - T1098 - SSH_AUTHORIZED_KEYS (23): - T1098.004 - CREATE_OR_MODIFY_SYSTEM_PROCESS (24): - T1543 - STEAL_WEB_SESSION_COOKIE (25): - T1539 - MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE (26): - T1578 - EXPLOIT_PUBLIC_FACING_APPLICATION (27): - T1190 - MODIFY_AUTHENTICATION_PROCESS (28): - T1556 - DATA_DESTRUCTION (29): - T1485 - DOMAIN_POLICY_MODIFICATION (30): - T1484 - IMPAIR_DEFENSES (31): - T1562 - NETWORK_SERVICE_DISCOVERY (32): - T1046 - ACCESS_TOKEN_MANIPULATION (33): - T1134 - ABUSE_ELEVATION_CONTROL_MECHANISM (34): - T1548 - DEFAULT_ACCOUNTS (35): - T1078.001 - """ - TECHNIQUE_UNSPECIFIED = 0 - ACTIVE_SCANNING = 1 - SCANNING_IP_BLOCKS = 2 - INGRESS_TOOL_TRANSFER = 3 - NATIVE_API = 4 - SHARED_MODULES = 5 - COMMAND_AND_SCRIPTING_INTERPRETER = 6 - UNIX_SHELL = 7 - RESOURCE_HIJACKING = 8 - PROXY = 9 - EXTERNAL_PROXY = 10 - MULTI_HOP_PROXY = 11 - DYNAMIC_RESOLUTION = 12 - UNSECURED_CREDENTIALS = 13 - VALID_ACCOUNTS = 14 - LOCAL_ACCOUNTS = 15 - CLOUD_ACCOUNTS = 16 - NETWORK_DENIAL_OF_SERVICE = 17 - PERMISSION_GROUPS_DISCOVERY = 18 - CLOUD_GROUPS = 19 - EXFILTRATION_OVER_WEB_SERVICE = 20 - EXFILTRATION_TO_CLOUD_STORAGE = 21 - ACCOUNT_MANIPULATION = 22 - SSH_AUTHORIZED_KEYS = 23 - CREATE_OR_MODIFY_SYSTEM_PROCESS = 24 - STEAL_WEB_SESSION_COOKIE = 25 - MODIFY_CLOUD_COMPUTE_INFRASTRUCTURE = 26 - EXPLOIT_PUBLIC_FACING_APPLICATION = 27 - MODIFY_AUTHENTICATION_PROCESS = 28 - DATA_DESTRUCTION = 29 - DOMAIN_POLICY_MODIFICATION = 30 - IMPAIR_DEFENSES = 31 - NETWORK_SERVICE_DISCOVERY = 32 - ACCESS_TOKEN_MANIPULATION = 33 - ABUSE_ELEVATION_CONTROL_MECHANISM = 34 - DEFAULT_ACCOUNTS = 35 - - primary_tactic: Tactic = proto.Field( - proto.ENUM, - number=1, - enum=Tactic, - ) - primary_techniques: MutableSequence[Technique] = proto.RepeatedField( - proto.ENUM, - number=2, - enum=Technique, - ) - additional_tactics: MutableSequence[Tactic] = proto.RepeatedField( - proto.ENUM, - number=3, - enum=Tactic, - ) - additional_techniques: MutableSequence[Technique] = proto.RepeatedField( - proto.ENUM, - number=4, - enum=Technique, - ) - version: str = proto.Field( - proto.STRING, - number=5, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py deleted file mode 100644 index b3ec0987..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/mute_config.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'MuteConfig', - }, -) - - -class MuteConfig(proto.Message): - r"""A mute config is a Cloud SCC resource that contains the - configuration to mute create/update events of findings. - - Attributes: - name (str): - This field will be ignored if provided on config creation. - Format - "organizations/{organization}/muteConfigs/{mute_config}" - "folders/{folder}/muteConfigs/{mute_config}" - "projects/{project}/muteConfigs/{mute_config}". - display_name (str): - The human readable name to be displayed for - the mute config. - description (str): - A description of the mute config. - filter (str): - Required. An expression that defines the filter to apply - across create/update events of findings. While creating a - filter string, be mindful of the scope in which the mute - configuration is being created. E.g., If a filter contains - project = X but is created under the project = Y scope, it - might not match any findings. - - The following field and operator combinations are supported: - - - severity: ``=``, ``:`` - - category: ``=``, ``:`` - - resource.name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.folders.resource_folder: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - - finding_class: ``=``, ``:`` - - indicator.ip_addresses: ``=``, ``:`` - - indicator.domains: ``=``, ``:`` - create_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The time at which the mute - config was created. This field is set by the - server and will be ignored if provided on config - creation. - update_time (google.protobuf.timestamp_pb2.Timestamp): - Output only. The most recent time at which - the mute config was updated. This field is set - by the server and will be ignored if provided on - config creation or update. - most_recent_editor (str): - Output only. Email address of the user who - last edited the mute config. This field is set - by the server and will be ignored if provided on - config creation or update. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - filter: str = proto.Field( - proto.STRING, - number=4, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=6, - message=timestamp_pb2.Timestamp, - ) - most_recent_editor: str = proto.Field( - proto.STRING, - number=7, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py deleted file mode 100644 index c6061740..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_config.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'NotificationConfig', - }, -) - - -class NotificationConfig(proto.Message): - r"""Cloud Security Command Center (Cloud SCC) notification - configs. - A notification config is a Cloud SCC resource that contains the - configuration to send notifications for create/update events of - findings, assets and etc. - - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - name (str): - The relative resource name of this notification config. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/notificationConfigs/notify_public_bucket", - "folders/{folder_id}/notificationConfigs/notify_public_bucket", - or - "projects/{project_id}/notificationConfigs/notify_public_bucket". - description (str): - The description of the notification config - (max of 1024 characters). - pubsub_topic (str): - The Pub/Sub topic to send notifications to. Its format is - "projects/[project_id]/topics/[topic]". - service_account (str): - Output only. The service account that needs - "pubsub.topics.publish" permission to publish to - the Pub/Sub topic. - streaming_config (google.cloud.securitycenter_v1.types.NotificationConfig.StreamingConfig): - The config for triggering streaming-based - notifications. - - This field is a member of `oneof`_ ``notify_config``. - """ - - class StreamingConfig(proto.Message): - r"""The config for streaming-based notifications, which send each - event as soon as it is detected. - - Attributes: - filter (str): - Expression that defines the filter to apply across - create/update events of assets or findings as specified by - the event type. The expression is a list of zero or more - restrictions combined via logical operators ``AND`` and - ``OR``. Parentheses are supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - """ - - filter: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - pubsub_topic: str = proto.Field( - proto.STRING, - number=3, - ) - service_account: str = proto.Field( - proto.STRING, - number=4, - ) - streaming_config: StreamingConfig = proto.Field( - proto.MESSAGE, - number=5, - oneof='notify_config', - message=StreamingConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py deleted file mode 100644 index 79e26c0f..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/notification_message.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import resource as gcs_resource - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'NotificationMessage', - }, -) - - -class NotificationMessage(proto.Message): - r"""Cloud SCC's Notification - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - notification_config_name (str): - Name of the notification config that - generated current notification. - finding (google.cloud.securitycenter_v1.types.Finding): - If it's a Finding based notification config, - this field will be populated. - - This field is a member of `oneof`_ ``event``. - resource (google.cloud.securitycenter_v1.types.Resource): - The Cloud resource tied to this - notification's Finding. - """ - - notification_config_name: str = proto.Field( - proto.STRING, - number=1, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=2, - oneof='event', - message=gcs_finding.Finding, - ) - resource: gcs_resource.Resource = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_resource.Resource, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py deleted file mode 100644 index 54c80c60..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/organization_settings.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - folder_ids (MutableSequence[str]): - The folder ids to use for filtering asset - discovery. It consists of only digits, e.g., - 756619654966. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - folder_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py deleted file mode 100644 index 3cd886e5..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/process.py +++ /dev/null @@ -1,135 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import file - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Process', - 'EnvironmentVariable', - }, -) - - -class Process(proto.Message): - r"""Represents an operating system process. - - Attributes: - name (str): - The process name visible in utilities like ``top`` and - ``ps``; it can be accessed via ``/proc/[pid]/comm`` and - changed with ``prctl(PR_SET_NAME)``. - binary (google.cloud.securitycenter_v1.types.File): - File information for the process executable. - libraries (MutableSequence[google.cloud.securitycenter_v1.types.File]): - File information for libraries loaded by the - process. - script (google.cloud.securitycenter_v1.types.File): - When the process represents the invocation of a script, - ``binary`` provides information about the interpreter while - ``script`` provides information about the script file - provided to the interpreter. - args (MutableSequence[str]): - Process arguments as JSON encoded strings. - arguments_truncated (bool): - True if ``args`` is incomplete. - env_variables (MutableSequence[google.cloud.securitycenter_v1.types.EnvironmentVariable]): - Process environment variables. - env_variables_truncated (bool): - True if ``env_variables`` is incomplete. - pid (int): - The process id. - parent_pid (int): - The parent process id. - """ - - name: str = proto.Field( - proto.STRING, - number=12, - ) - binary: file.File = proto.Field( - proto.MESSAGE, - number=3, - message=file.File, - ) - libraries: MutableSequence[file.File] = proto.RepeatedField( - proto.MESSAGE, - number=4, - message=file.File, - ) - script: file.File = proto.Field( - proto.MESSAGE, - number=5, - message=file.File, - ) - args: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=6, - ) - arguments_truncated: bool = proto.Field( - proto.BOOL, - number=7, - ) - env_variables: MutableSequence['EnvironmentVariable'] = proto.RepeatedField( - proto.MESSAGE, - number=8, - message='EnvironmentVariable', - ) - env_variables_truncated: bool = proto.Field( - proto.BOOL, - number=9, - ) - pid: int = proto.Field( - proto.INT64, - number=10, - ) - parent_pid: int = proto.Field( - proto.INT64, - number=11, - ) - - -class EnvironmentVariable(proto.Message): - r"""EnvironmentVariable is a name-value pair to store environment - variables for Process. - - Attributes: - name (str): - Environment variable name as a JSON encoded - string. - val (str): - Environment variable value as a JSON encoded - string. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - val: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py deleted file mode 100644 index 5c6cfad9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/resource.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import folder - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Resource', - }, -) - - -class Resource(proto.Message): - r"""Information related to the Google Cloud resource. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - display_name (str): - The human readable name of the resource. - type_ (str): - The full resource type of the resource. - project (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The project ID that the resource belongs to. - parent (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Output only. Contains a Folder message for - each folder in the assets ancestry. The first - folder is the deepest nested folder, and the - last folder is the folder directly under the - Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=8, - ) - type_: str = proto.Field( - proto.STRING, - number=6, - ) - project: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py deleted file mode 100644 index 11a7f0e2..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py deleted file mode 100644 index 4c099a33..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/security_marks.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - canonical_name (str): - The canonical name of the marks. Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "folders/{folder_id}/assets/{asset_id}/securityMarks" - "projects/{project_number}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py deleted file mode 100644 index 03153786..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/securitycenter_service.py +++ /dev/null @@ -1,2456 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1.types import asset as gcs_asset -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import folder -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'BulkMuteFindingsRequest', - 'BulkMuteFindingsResponse', - 'CreateFindingRequest', - 'CreateMuteConfigRequest', - 'CreateNotificationConfigRequest', - 'CreateSecurityHealthAnalyticsCustomModuleRequest', - 'CreateSourceRequest', - 'DeleteMuteConfigRequest', - 'DeleteNotificationConfigRequest', - 'DeleteSecurityHealthAnalyticsCustomModuleRequest', - 'GetBigQueryExportRequest', - 'GetMuteConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetEffectiveSecurityHealthAnalyticsCustomModuleRequest', - 'GetSecurityHealthAnalyticsCustomModuleRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListDescendantSecurityHealthAnalyticsCustomModulesRequest', - 'ListDescendantSecurityHealthAnalyticsCustomModulesResponse', - 'ListMuteConfigsRequest', - 'ListMuteConfigsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesRequest', - 'ListEffectiveSecurityHealthAnalyticsCustomModulesResponse', - 'ListSecurityHealthAnalyticsCustomModulesRequest', - 'ListSecurityHealthAnalyticsCustomModulesResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'SetMuteRequest', - 'RunAssetDiscoveryRequest', - 'UpdateExternalSystemRequest', - 'UpdateFindingRequest', - 'UpdateMuteConfigRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityHealthAnalyticsCustomModuleRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - 'CreateBigQueryExportRequest', - 'UpdateBigQueryExportRequest', - 'ListBigQueryExportsRequest', - 'ListBigQueryExportsResponse', - 'DeleteBigQueryExportRequest', - }, -) - - -class BulkMuteFindingsRequest(proto.Message): - r"""Request message for bulk findings update. - Note: - 1. If multiple bulk update requests match the same resource, the - order in which they get executed is not defined. - 2. Once a bulk operation is started, there is no way to stop it. - - Attributes: - parent (str): - Required. The parent, at which bulk action needs to be - applied. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - filter (str): - Expression that identifies findings that should be updated. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - mute_annotation (str): - This can be a mute configuration name or any - identifier for mute/unmute of findings based on - the filter. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - mute_annotation: str = proto.Field( - proto.STRING, - number=3, - ) - - -class BulkMuteFindingsResponse(proto.Message): - r"""The response to a BulkMute request. Contains the LRO - information. - - """ - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - alphanumeric and less than or equal to 32 - characters and greater than 0 characters in - length. - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateMuteConfigRequest(proto.Message): - r"""Request message for creating a mute config. - - Attributes: - parent (str): - Required. Resource name of the new mute configs's parent. - Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being created. - mute_config_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must consist - of lower case letters, numbers, and hyphen, with - the first character a letter, the last a letter - or a number, and a 63 character maximum. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - mute_config: gcs_mute_config.MuteConfig = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_mute_config.MuteConfig, - ) - mute_config_id: str = proto.Field( - proto.STRING, - number=3, - ) - - -class CreateNotificationConfigRequest(proto.Message): - r"""Request message for creating a notification config. - - Attributes: - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - config_id (str): - Required. - Unique identifier provided by the client within - the parent scope. It must be between 1 and 128 - characters and contain alphanumeric characters, - underscores, or hyphens only. - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config being - created. The name and the service account will - be ignored as they are both output only fields - on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - config_id: str = proto.Field( - proto.STRING, - number=2, - ) - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_notification_config.NotificationConfig, - ) - - -class CreateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for creating security health analytics custom - modules. - - Attributes: - parent (str): - Required. Resource name of the new custom - module's parent. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. SecurityHealthAnalytics custom - module to create. The provided name is ignored - and reset with provided parent information and - server-generated ID. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class DeleteMuteConfigRequest(proto.Message): - r"""Request message for deleting a mute config. - - Attributes: - name (str): - Required. Name of the mute config to delete. Its format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class DeleteNotificationConfigRequest(proto.Message): - r"""Request message for deleting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", or - "projects/[project_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class DeleteSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for deleting security health analytics custom - modules. - - Attributes: - name (str): - Required. Name of the custom module to - delete. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetBigQueryExportRequest(proto.Message): - r"""Request message for retrieving a BigQuery export. - - Attributes: - name (str): - Required. Name of the BigQuery export to retrieve. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetMuteConfigRequest(proto.Message): - r"""Request message for retrieving a mute config. - - Attributes: - name (str): - Required. Name of the mute config to retrieve. Its format is - organizations/{organization}/muteConfigs/{config_id}, - folders/{folder}/muteConfigs/{config_id}, or - projects/{project}/muteConfigs/{config_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetNotificationConfigRequest(proto.Message): - r"""Request message for getting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to get. Its format - is - "organizations/[organization_id]/notificationConfigs/[config_id]", - "folders/[folder_id]/notificationConfigs/[config_id]", or - "projects/[project_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for getting effective security health - analytics custom modules. - - Attributes: - name (str): - Required. Name of the effective custom module - to get. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/effectiveCustomModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for getting security health analytics custom - modules. - - Attributes: - name (str): - Required. Name of the custom module to get. - Its format is - "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{customModule}", - "folders/{folder}/securityHealthAnalyticsSettings/customModules/{customModule}", - or - "projects/{project}/securityHealthAnalyticsSettings/customModules/{customModule}". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. The name of the parent to group the assets by. Its - format is "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_project_display_name - - security_center_properties.resource_type - - security_center_properties.resource_parent - - security_center_properties.resource_parent_display_name - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - - security_center_properties.resource_project_display_name - - security_center_properties.resource_parent_display_name - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" property is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - severity: ``=``, ``:`` - - - workflow_state: ``=``, ``:`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based - on a property existing: - ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - - - resource: - - - resource.name: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state_change``). The string value - should follow SQL syntax: comma separated list of fields. - For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration is - set: - - - state_change - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing descendant security health - analytics custom modules. - - Attributes: - parent (str): - Required. Name of parent to list descendant - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListDescendantSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing descendant security health - analytics custom modules. - - Attributes: - security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): - Custom modules belonging to the requested - parent and its descendants. - next_page_token (str): - If not empty, indicates that there may be - more custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListMuteConfigsRequest(proto.Message): - r"""Request message for listing mute configs at a given scope - e.g. organization, folder or project. - - Attributes: - parent (str): - Required. The parent, which owns the collection of mute - configs. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - page_size (int): - The maximum number of configs to return. The - service may return fewer than this value. - If unspecified, at most 10 configs will be - returned. The maximum value is 1000; values - above 1000 will be coerced to 1000. - page_token (str): - A page token, received from a previous ``ListMuteConfigs`` - call. Provide this to retrieve the subsequent page. - - When paginating, all other parameters provided to - ``ListMuteConfigs`` must match the call that provided the - page token. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListMuteConfigsResponse(proto.Message): - r"""Response message for listing mute configs. - - Attributes: - mute_configs (MutableSequence[google.cloud.securitycenter_v1.types.MuteConfig]): - The mute configs from the specified parent. - next_page_token (str): - A token, which can be sent as ``page_token`` to retrieve the - next page. If this field is omitted, there are no subsequent - pages. - """ - - @property - def raw_page(self): - return self - - mute_configs: MutableSequence[gcs_mute_config.MuteConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_mute_config.MuteConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListNotificationConfigsRequest(proto.Message): - r"""Request message for listing notification configs. - - Attributes: - parent (str): - Required. The name of the parent in which to list the - notification configurations. Its format is - "organizations/[organization_id]", "folders/[folder_id]", or - "projects/[project_id]". - page_token (str): - The value returned by the last - ``ListNotificationConfigsResponse``; indicates that this is - a continuation of a prior ``ListNotificationConfigs`` call, - and that the system should return the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=3, - ) - - -class ListNotificationConfigsResponse(proto.Message): - r"""Response message for listing notification configs. - - Attributes: - notification_configs (MutableSequence[google.cloud.securitycenter_v1.types.NotificationConfig]): - Notification configs belonging to the - requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing effective security health - analytics custom modules. - - Attributes: - parent (str): - Required. Name of parent to list effective - custom modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListEffectiveSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing effective security health - analytics custom modules. - - Attributes: - effective_security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule]): - Effective custom modules belonging to the - requested parent. - next_page_token (str): - If not empty, indicates that there may be - more effective custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - effective_security_health_analytics_custom_modules: MutableSequence[effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSecurityHealthAnalyticsCustomModulesRequest(proto.Message): - r"""Request message for listing security health analytics custom - modules. - - Attributes: - parent (str): - Required. Name of parent to list custom - modules. Its format is - "organizations/{organization}/securityHealthAnalyticsSettings", - "folders/{folder}/securityHealthAnalyticsSettings", - or - "projects/{project}/securityHealthAnalyticsSettings". - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - page_token (str): - The value returned by the last call - indicating a continuation - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListSecurityHealthAnalyticsCustomModulesResponse(proto.Message): - r"""Response message for listing security health analytics custom - modules. - - Attributes: - security_health_analytics_custom_modules (MutableSequence[google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule]): - Custom modules belonging to the requested - parent. - next_page_token (str): - If not empty, indicates that there may be - more custom modules to be returned. - """ - - @property - def raw_page(self): - return self - - security_health_analytics_custom_modules: MutableSequence[gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. The name of the parent resource that contains the - assets. The value that you can specify on parent depends on - the method in which you specify parent. You can specify one - of the following values: "organizations/[organization_id]", - "folders/[folder_id]", or "projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following are the allowed field and operator - combinations: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - - The following fields are supported: name update_time - resource_properties security_marks.marks - security_center_properties.resource_name - security_center_properties.resource_display_name - security_center_properties.resource_parent - security_center_properties.resource_parent_display_name - security_center_properties.resource_project - security_center_properties.resource_project_display_name - security_center_properties.resource_type - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetsResult's - "state_change" attribute is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the ListAssetsResult - fields to be listed in the response. - An empty field mask will list all fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1.types.Asset): - Asset matching the search request. - state_change (google.cloud.securitycenter_v1.types.ListAssetsResponse.ListAssetsResult.StateChange): - State change of the asset between the points - in time. - """ - class StateChange(proto.Enum): - r"""The change in state of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state change will be: - UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - ADDED (1): - Asset was added between the points in time. - REMOVED (2): - Asset was removed between the points in time. - ACTIVE (3): - Asset was present at both point(s) in time. - """ - UNUSED = 0 - ADDED = 1 - REMOVED = 2 - ACTIVE = 3 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.StateChange', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - severity: ``=``, ``:`` - - - workflow_state: ``=``, ``:`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based - on a property existing: - ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - - - resource: - - - resource.name: ``=``, ``:`` - - resource.parent_name: ``=``, ``:`` - - resource.parent_display_name: ``=``, ``:`` - - resource.project_name: ``=``, ``:`` - - resource.project_display_name: ``=``, ``:`` - - resource.type: ``=``, ``:`` - - resource.folders.resource_folder: ``=``, ``:`` - - resource.display_name: ``=``, ``:`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - - The following fields are supported: name parent state - category resource_name event_time source_properties - security_marks.marks - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListFindingsResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added in any state during - the compare_duration period of time that precedes the - read_time. This is the time between (read_time - - compare_duration) and read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the Finding fields to - be listed in the response. An empty field mask - will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - list_findings_results (MutableSequence[google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - class ListFindingsResult(proto.Message): - r"""Result containing the Finding and its StateChange. - - Attributes: - finding (google.cloud.securitycenter_v1.types.Finding): - Finding matching the search request. - state_change (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.StateChange): - State change of the finding between the - points in time. - resource (google.cloud.securitycenter_v1.types.ListFindingsResponse.ListFindingsResult.Resource): - Output only. Resource that is associated with - this finding. - """ - class StateChange(proto.Enum): - r"""The change in state of the finding. - - When querying across two points in time this describes the change in - the finding between the two points: CHANGED, UNCHANGED, ADDED, or - REMOVED. Findings can not be deleted, so REMOVED implies that the - finding at timestamp does not match the filter specified, but it did - at timestamp - compare_duration. If there was no compare_duration - supplied in the request the state change will be: UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - CHANGED (1): - The finding has changed state in some way - between the points in time and existed at both - points. - UNCHANGED (2): - The finding has not changed state between the - points in time and existed at both points. - ADDED (3): - The finding was created between the points in - time. - REMOVED (4): - The finding at timestamp does not match the filter - specified, but it did at timestamp - compare_duration. - """ - UNUSED = 0 - CHANGED = 1 - UNCHANGED = 2 - ADDED = 3 - REMOVED = 4 - - class Resource(proto.Message): - r"""Information related to the Google Cloud resource that is - associated with this finding. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - display_name (str): - The human readable name of the resource. - type_ (str): - The full resource type of the resource. - project_name (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The project ID that the resource belongs to. - parent_name (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=8, - ) - type_: str = proto.Field( - proto.STRING, - number=6, - ) - project_name: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent_name: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListFindingsResponse.ListFindingsResult.StateChange', - ) - resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( - proto.MESSAGE, - number=3, - message='ListFindingsResponse.ListFindingsResult.Resource', - ) - - @property - def raw_page(self): - return self - - list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListFindingsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - state (google.cloud.securitycenter_v1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class SetMuteRequest(proto.Message): - r"""Request message for updating a finding's mute status. - - Attributes: - name (str): - Required. The `relative resource - name `__ - of the finding. Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}", - "projects/{project_id}/sources/{source_id}/findings/{finding_id}". - mute (google.cloud.securitycenter_v1.types.Finding.Mute): - Required. The desired state of the Mute. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - mute: gcs_finding.Finding.Mute = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.Mute, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateExternalSystemRequest(proto.Message): - r"""Request message for updating a ExternalSystem resource. - - Attributes: - external_system (google.cloud.securitycenter_v1.types.ExternalSystem): - Required. The external system resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - external system resource. - If empty all mutable fields will be updated. - """ - - external_system: gcs_external_system.ExternalSystem = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_external_system.ExternalSystem, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must be alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing source_properties. - Individual source_properties can be added/updated by using - "source_properties." in the field mask. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateMuteConfigRequest(proto.Message): - r"""Request message for updating a mute config. - - Attributes: - mute_config (google.cloud.securitycenter_v1.types.MuteConfig): - Required. The mute config being updated. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be updated. - """ - - mute_config: gcs_mute_config.MuteConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_mute_config.MuteConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateNotificationConfigRequest(proto.Message): - r"""Request message for updating a notification config. - - Attributes: - notification_config (google.cloud.securitycenter_v1.types.NotificationConfig): - Required. The notification config to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - notification config. - If empty all mutable fields will be updated. - """ - - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - If empty all mutable fields will be updated. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityHealthAnalyticsCustomModuleRequest(proto.Message): - r"""Request message for updating security health analytics custom - modules. - - Attributes: - security_health_analytics_custom_module (google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule): - Required. The SecurityHealthAnalytics custom - module to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to update. - """ - - security_health_analytics_custom_module: gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - If empty all mutable fields will be updated. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If empty - or set to "marks", all marks will be replaced. Individual - marks can be updated using "marks.". - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. If not set uses current server - time. Updates will be applied to the - SecurityMarks that are active immediately - preceding this time. Must be earlier or equal to - the server time. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class CreateBigQueryExportRequest(proto.Message): - r"""Request message for creating a BigQuery export. - - Attributes: - parent (str): - Required. The name of the parent resource of the new - BigQuery export. Its format is - "organizations/[organization_id]", "folders/[folder_id]", or - "projects/[project_id]". - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being created. - big_query_export_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must consist - of lower case letters, numbers, and hyphen, with - the first character a letter, the last a letter - or a number, and a 63 character maximum. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - big_query_export: bigquery_export.BigQueryExport = proto.Field( - proto.MESSAGE, - number=2, - message=bigquery_export.BigQueryExport, - ) - big_query_export_id: str = proto.Field( - proto.STRING, - number=3, - ) - - -class UpdateBigQueryExportRequest(proto.Message): - r"""Request message for updating a BigQuery export. - - Attributes: - big_query_export (google.cloud.securitycenter_v1.types.BigQueryExport): - Required. The BigQuery export being updated. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The list of fields to be updated. - If empty all mutable fields will be updated. - """ - - big_query_export: bigquery_export.BigQueryExport = proto.Field( - proto.MESSAGE, - number=1, - message=bigquery_export.BigQueryExport, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class ListBigQueryExportsRequest(proto.Message): - r"""Request message for listing BigQuery exports at a given scope - e.g. organization, folder or project. - - Attributes: - parent (str): - Required. The parent, which owns the collection of BigQuery - exports. Its format is "organizations/[organization_id]", - "folders/[folder_id]", "projects/[project_id]". - page_size (int): - The maximum number of configs to return. The - service may return fewer than this value. - If unspecified, at most 10 configs will be - returned. The maximum value is 1000; values - above 1000 will be coerced to 1000. - page_token (str): - A page token, received from a previous - ``ListBigQueryExports`` call. Provide this to retrieve the - subsequent page. When paginating, all other parameters - provided to ``ListBigQueryExports`` must match the call that - provided the page token. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_size: int = proto.Field( - proto.INT32, - number=2, - ) - page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class ListBigQueryExportsResponse(proto.Message): - r"""Response message for listing BigQuery exports. - - Attributes: - big_query_exports (MutableSequence[google.cloud.securitycenter_v1.types.BigQueryExport]): - The BigQuery exports from the specified - parent. - next_page_token (str): - A token, which can be sent as ``page_token`` to retrieve the - next page. If this field is omitted, there are no subsequent - pages. - """ - - @property - def raw_page(self): - return self - - big_query_exports: MutableSequence[bigquery_export.BigQueryExport] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=bigquery_export.BigQueryExport, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class DeleteBigQueryExportRequest(proto.Message): - r"""Request message for deleting a BigQuery export. - - Attributes: - name (str): - Required. The name of the BigQuery export to delete. Its - format is - organizations/{organization}/bigQueryExports/{export_id}, - folders/{folder}/bigQueryExports/{export_id}, or - projects/{project}/bigQueryExports/{export_id} - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py deleted file mode 100644 index 3694ecf0..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/source.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, and other tools. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and outdated or - insecure libraries.". - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}", - "folders/{folder_id}/sources/{source_id}" or - "projects/{project_number}/sources/{source_id}", depending - on the closest CRM ancestor of the resource associated with - the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py b/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py deleted file mode 100644 index 5fcbfab9..00000000 --- a/owl-bot-staging/v1/google/cloud/securitycenter_v1/types/vulnerability.py +++ /dev/null @@ -1,353 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1', - manifest={ - 'Vulnerability', - 'Cve', - 'Reference', - 'Cvssv3', - }, -) - - -class Vulnerability(proto.Message): - r"""Refers to common vulnerability fields e.g. cve, cvss, cwe - etc. - - Attributes: - cve (google.cloud.securitycenter_v1.types.Cve): - CVE stands for Common Vulnerabilities and - Exposures (https://cve.mitre.org/about/) - """ - - cve: 'Cve' = proto.Field( - proto.MESSAGE, - number=1, - message='Cve', - ) - - -class Cve(proto.Message): - r"""CVE stands for Common Vulnerabilities and Exposures. - More information: https://cve.mitre.org - - Attributes: - id (str): - The unique identifier for the vulnerability. - e.g. CVE-2021-34527 - references (MutableSequence[google.cloud.securitycenter_v1.types.Reference]): - Additional information about the CVE. - e.g. - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527 - cvssv3 (google.cloud.securitycenter_v1.types.Cvssv3): - Describe Common Vulnerability Scoring System - specified at - https://www.first.org/cvss/v3.1/specification-document - upstream_fix_available (bool): - Whether upstream fix is available for the - CVE. - """ - - id: str = proto.Field( - proto.STRING, - number=1, - ) - references: MutableSequence['Reference'] = proto.RepeatedField( - proto.MESSAGE, - number=2, - message='Reference', - ) - cvssv3: 'Cvssv3' = proto.Field( - proto.MESSAGE, - number=3, - message='Cvssv3', - ) - upstream_fix_available: bool = proto.Field( - proto.BOOL, - number=4, - ) - - -class Reference(proto.Message): - r"""Additional Links - - Attributes: - source (str): - Source of the reference e.g. NVD - uri (str): - Uri for the mentioned source e.g. - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-34527. - """ - - source: str = proto.Field( - proto.STRING, - number=1, - ) - uri: str = proto.Field( - proto.STRING, - number=2, - ) - - -class Cvssv3(proto.Message): - r"""Common Vulnerability Scoring System version 3. - - Attributes: - base_score (float): - The base score is a function of the base - metric scores. - attack_vector (google.cloud.securitycenter_v1.types.Cvssv3.AttackVector): - Base Metrics - Represents the intrinsic characteristics of a - vulnerability that are constant over time and - across user environments. This metric reflects - the context by which vulnerability exploitation - is possible. - attack_complexity (google.cloud.securitycenter_v1.types.Cvssv3.AttackComplexity): - This metric describes the conditions beyond - the attacker's control that must exist in order - to exploit the vulnerability. - privileges_required (google.cloud.securitycenter_v1.types.Cvssv3.PrivilegesRequired): - This metric describes the level of privileges - an attacker must possess before successfully - exploiting the vulnerability. - user_interaction (google.cloud.securitycenter_v1.types.Cvssv3.UserInteraction): - This metric captures the requirement for a - human user, other than the attacker, to - participate in the successful compromise of the - vulnerable component. - scope (google.cloud.securitycenter_v1.types.Cvssv3.Scope): - The Scope metric captures whether a - vulnerability in one vulnerable component - impacts resources in components beyond its - security scope. - confidentiality_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to the - confidentiality of the information resources - managed by a software component due to a - successfully exploited vulnerability. - integrity_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to integrity - of a successfully exploited vulnerability. - availability_impact (google.cloud.securitycenter_v1.types.Cvssv3.Impact): - This metric measures the impact to the - availability of the impacted component resulting - from a successfully exploited vulnerability. - """ - class AttackVector(proto.Enum): - r"""This metric reflects the context by which vulnerability - exploitation is possible. - - Values: - ATTACK_VECTOR_UNSPECIFIED (0): - Invalid value. - ATTACK_VECTOR_NETWORK (1): - The vulnerable component is bound to the - network stack and the set of possible attackers - extends beyond the other options listed below, - up to and including the entire Internet. - ATTACK_VECTOR_ADJACENT (2): - The vulnerable component is bound to the - network stack, but the attack is limited at the - protocol level to a logically adjacent topology. - ATTACK_VECTOR_LOCAL (3): - The vulnerable component is not bound to the - network stack and the attacker's path is via - read/write/execute capabilities. - ATTACK_VECTOR_PHYSICAL (4): - The attack requires the attacker to - physically touch or manipulate the vulnerable - component. - """ - ATTACK_VECTOR_UNSPECIFIED = 0 - ATTACK_VECTOR_NETWORK = 1 - ATTACK_VECTOR_ADJACENT = 2 - ATTACK_VECTOR_LOCAL = 3 - ATTACK_VECTOR_PHYSICAL = 4 - - class AttackComplexity(proto.Enum): - r"""This metric describes the conditions beyond the attacker's - control that must exist in order to exploit the vulnerability. - - Values: - ATTACK_COMPLEXITY_UNSPECIFIED (0): - Invalid value. - ATTACK_COMPLEXITY_LOW (1): - Specialized access conditions or extenuating - circumstances do not exist. An attacker can - expect repeatable success when attacking the - vulnerable component. - ATTACK_COMPLEXITY_HIGH (2): - A successful attack depends on conditions - beyond the attacker's control. That is, a - successful attack cannot be accomplished at - will, but requires the attacker to invest in - some measurable amount of effort in preparation - or execution against the vulnerable component - before a successful attack can be expected. - """ - ATTACK_COMPLEXITY_UNSPECIFIED = 0 - ATTACK_COMPLEXITY_LOW = 1 - ATTACK_COMPLEXITY_HIGH = 2 - - class PrivilegesRequired(proto.Enum): - r"""This metric describes the level of privileges an attacker - must possess before successfully exploiting the vulnerability. - - Values: - PRIVILEGES_REQUIRED_UNSPECIFIED (0): - Invalid value. - PRIVILEGES_REQUIRED_NONE (1): - The attacker is unauthorized prior to attack, - and therefore does not require any access to - settings or files of the vulnerable system to - carry out an attack. - PRIVILEGES_REQUIRED_LOW (2): - The attacker requires privileges that provide - basic user capabilities that could normally - affect only settings and files owned by a user. - Alternatively, an attacker with Low privileges - has the ability to access only non-sensitive - resources. - PRIVILEGES_REQUIRED_HIGH (3): - The attacker requires privileges that provide - significant (e.g., administrative) control over - the vulnerable component allowing access to - component-wide settings and files. - """ - PRIVILEGES_REQUIRED_UNSPECIFIED = 0 - PRIVILEGES_REQUIRED_NONE = 1 - PRIVILEGES_REQUIRED_LOW = 2 - PRIVILEGES_REQUIRED_HIGH = 3 - - class UserInteraction(proto.Enum): - r"""This metric captures the requirement for a human user, other - than the attacker, to participate in the successful compromise - of the vulnerable component. - - Values: - USER_INTERACTION_UNSPECIFIED (0): - Invalid value. - USER_INTERACTION_NONE (1): - The vulnerable system can be exploited - without interaction from any user. - USER_INTERACTION_REQUIRED (2): - Successful exploitation of this vulnerability - requires a user to take some action before the - vulnerability can be exploited. - """ - USER_INTERACTION_UNSPECIFIED = 0 - USER_INTERACTION_NONE = 1 - USER_INTERACTION_REQUIRED = 2 - - class Scope(proto.Enum): - r"""The Scope metric captures whether a vulnerability in one - vulnerable component impacts resources in components beyond its - security scope. - - Values: - SCOPE_UNSPECIFIED (0): - Invalid value. - SCOPE_UNCHANGED (1): - An exploited vulnerability can only affect - resources managed by the same security - authority. - SCOPE_CHANGED (2): - An exploited vulnerability can affect - resources beyond the security scope managed by - the security authority of the vulnerable - component. - """ - SCOPE_UNSPECIFIED = 0 - SCOPE_UNCHANGED = 1 - SCOPE_CHANGED = 2 - - class Impact(proto.Enum): - r"""The Impact metrics capture the effects of a successfully - exploited vulnerability on the component that suffers the worst - outcome that is most directly and predictably associated with - the attack. - - Values: - IMPACT_UNSPECIFIED (0): - Invalid value. - IMPACT_HIGH (1): - High impact. - IMPACT_LOW (2): - Low impact. - IMPACT_NONE (3): - No impact. - """ - IMPACT_UNSPECIFIED = 0 - IMPACT_HIGH = 1 - IMPACT_LOW = 2 - IMPACT_NONE = 3 - - base_score: float = proto.Field( - proto.DOUBLE, - number=1, - ) - attack_vector: AttackVector = proto.Field( - proto.ENUM, - number=5, - enum=AttackVector, - ) - attack_complexity: AttackComplexity = proto.Field( - proto.ENUM, - number=6, - enum=AttackComplexity, - ) - privileges_required: PrivilegesRequired = proto.Field( - proto.ENUM, - number=7, - enum=PrivilegesRequired, - ) - user_interaction: UserInteraction = proto.Field( - proto.ENUM, - number=8, - enum=UserInteraction, - ) - scope: Scope = proto.Field( - proto.ENUM, - number=9, - enum=Scope, - ) - confidentiality_impact: Impact = proto.Field( - proto.ENUM, - number=10, - enum=Impact, - ) - integrity_impact: Impact = proto.Field( - proto.ENUM, - number=11, - enum=Impact, - ) - availability_impact: Impact = proto.Field( - proto.ENUM, - number=12, - enum=Impact, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1/mypy.ini b/owl-bot-staging/v1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1/noxfile.py b/owl-bot-staging/v1/noxfile.py deleted file mode 100644 index 5aa9e2cb..00000000 --- a/owl-bot-staging/v1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py deleted file mode 100644 index 9f200964..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for BulkMuteFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py deleted file mode 100644 index 4b401c59..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for BulkMuteFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_bulk_mute_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.BulkMuteFindingsRequest( - parent="parent_value", - ) - - # Make the request - operation = client.bulk_mute_findings(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py deleted file mode 100644 index 6167e9c2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = await client.create_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py deleted file mode 100644 index d56e951b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_big_query_export_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateBigQueryExportRequest( - parent="parent_value", - big_query_export_id="big_query_export_id_value", - ) - - # Make the request - response = client.create_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py deleted file mode 100644 index 23306071..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 28a836e5..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py deleted file mode 100644 index 464d78cb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_async.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = await client.create_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py deleted file mode 100644 index 9b9f6bad..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_mute_config_sync.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.CreateMuteConfigRequest( - parent="parent_value", - mute_config=mute_config, - mute_config_id="mute_config_id_value", - ) - - # Make the request - response = client.create_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py deleted file mode 100644 index 8df8025a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py deleted file mode 100644 index 21354ca0..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_notification_config_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py deleted file mode 100644 index 5ce8609b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py deleted file mode 100644 index eeae4934..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py deleted file mode 100644 index 7c965f30..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - await client.delete_big_query_export(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py deleted file mode 100644 index 7effded9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_big_query_export_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteBigQueryExportRequest( - name="name_value", - ) - - # Make the request - client.delete_big_query_export(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py deleted file mode 100644 index 52a13bba..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_mute_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py deleted file mode 100644 index c8970d3b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_mute_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteMuteConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_mute_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py deleted file mode 100644 index 1d11af7d..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py deleted file mode 100644 index 0607ed23..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_notification_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - -# [END securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py deleted file mode 100644 index 0e4f204f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = await client.get_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py deleted file mode 100644 index f1cdd5cd..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_big_query_export_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetBigQueryExportRequest( - name="name_value", - ) - - # Make the request - response = client.get_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index ce96f40e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 54bd97ea..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py deleted file mode 100644 index 4bb54d33..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py deleted file mode 100644 index efa2d097..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_mute_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetMuteConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py deleted file mode 100644 index 0d0ae834..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py deleted file mode 100644 index 1e9c80a7..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_notification_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index 7f9e2924..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index cf81626a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py deleted file mode 100644 index 4108d8e2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py deleted file mode 100644 index 8f8dffe2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py deleted file mode 100644 index e445a285..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 13d1291e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py deleted file mode 100644 index 9577bd52..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py deleted file mode 100644 index 59b3edff..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py deleted file mode 100644 index 5191db34..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 6f2e8d1c..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py deleted file mode 100644 index 5a4a7ce1..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListBigQueryExports -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py deleted file mode 100644 index ffbd3f44..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_big_query_exports_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListBigQueryExports -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_big_query_exports(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListBigQueryExportsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_big_query_exports(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py deleted file mode 100644 index c5fc4e47..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py deleted file mode 100644 index b3489d50..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py deleted file mode 100644 index 2071e7b9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListMuteConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py deleted file mode 100644 index ebf57076..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_mute_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListMuteConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_mute_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListMuteConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_mute_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py deleted file mode 100644 index ebce4273..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py deleted file mode 100644 index 8767d848..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_notification_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py deleted file mode 100644 index cc2376f2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py deleted file mode 100644 index ce9cf9e2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index f46d5c97..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index f532edfb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index d6d59805..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index 9d22cf31..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index 011f3edc..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index 7462b76d..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py deleted file mode 100644 index 0505bcfb..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetMute -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetMute_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = await client.set_mute(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetMute_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py deleted file mode 100644 index f3a30dd5..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_set_mute_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetMute -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_SetMute_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_set_mute(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.SetMuteRequest( - name="name_value", - mute="UNDEFINED", - ) - - # Make the request - response = client.set_mute(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_SetMute_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index d3740be9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index e4d93da8..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py deleted file mode 100644 index bb383531..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = await client.update_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py deleted file mode 100644 index 7d0dbf32..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_big_query_export_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateBigQueryExport -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_big_query_export(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateBigQueryExportRequest( - ) - - # Make the request - response = client.update_big_query_export(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py deleted file mode 100644 index a3fe2681..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateExternalSystem -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = await client.update_external_system(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py deleted file mode 100644 index 0a4e224f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_external_system_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateExternalSystem -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_external_system(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateExternalSystemRequest( - ) - - # Make the request - response = client.update_external_system(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py deleted file mode 100644 index d73667f2..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py deleted file mode 100644 index d8cf809f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py deleted file mode 100644 index a3c702a0..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_async.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = await client.update_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py deleted file mode 100644 index b73b1ad8..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_mute_config_sync.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateMuteConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_mute_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - mute_config = securitycenter_v1.MuteConfig() - mute_config.filter = "filter_value" - - request = securitycenter_v1.UpdateMuteConfigRequest( - mute_config=mute_config, - ) - - # Make the request - response = client.update_mute_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py deleted file mode 100644 index da71a0be..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py deleted file mode 100644 index cef53b79..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_notification_config_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_notification_config(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index e9b3d66f..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index eca45d7b..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 81e9554e..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index fe2b480c..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py deleted file mode 100644 index 9bc61107..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py deleted file mode 100644 index d65724e9..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json b/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json deleted file mode 100644 index ec678e1a..00000000 --- a/owl-bot-staging/v1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json +++ /dev/null @@ -1,7211 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1", - "version": "v1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.bulk_mute_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "BulkMuteFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "bulk_mute_findings" - }, - "description": "Sample for BulkMuteFindings", - "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.bulk_mute_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.BulkMuteFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "BulkMuteFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.BulkMuteFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "bulk_mute_findings" - }, - "description": "Sample for BulkMuteFindings", - "file": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_BulkMuteFindings_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_bulk_mute_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "big_query_export_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "create_big_query_export" - }, - "description": "Sample for CreateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_create_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateBigQueryExportRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "big_query_export_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "create_big_query_export" - }, - "description": "Sample for CreateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateBigQueryExport_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "mute_config_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "create_mute_config" - }, - "description": "Sample for CreateMuteConfig", - "file": "securitycenter_v1_generated_security_center_create_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_async", - "segments": [ - { - "end": 56, - "start": 27, - "type": "FULL" - }, - { - "end": 56, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 50, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 53, - "start": 51, - "type": "REQUEST_EXECUTION" - }, - { - "end": 57, - "start": 54, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateMuteConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "mute_config_id", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "create_mute_config" - }, - "description": "Sample for CreateMuteConfig", - "file": "securitycenter_v1_generated_security_center_create_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateMuteConfig_sync", - "segments": [ - { - "end": 56, - "start": 27, - "type": "FULL" - }, - { - "end": 56, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 50, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 53, - "start": 51, - "type": "REQUEST_EXECUTION" - }, - { - "end": 57, - "start": 54, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_create_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_create_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateNotificationConfig_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "create_security_health_analytics_custom_module" - }, - "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "create_security_health_analytics_custom_module" - }, - "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_big_query_export" - }, - "description": "Sample for DeleteBigQueryExport", - "file": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_big_query_export" - }, - "description": "Sample for DeleteBigQueryExport", - "file": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteBigQueryExport_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_mute_config" - }, - "description": "Sample for DeleteMuteConfig", - "file": "securitycenter_v1_generated_security_center_delete_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_mute_config" - }, - "description": "Sample for DeleteMuteConfig", - "file": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteMuteConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1_generated_security_center_delete_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteNotificationConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_security_health_analytics_custom_module" - }, - "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_security_health_analytics_custom_module" - }, - "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" - }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" - }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_effective_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", - "shortName": "get_effective_security_health_analytics_custom_module" - }, - "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_effective_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", - "shortName": "get_effective_security_health_analytics_custom_module" - }, - "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" - }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" - }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "get_security_health_analytics_custom_module" - }, - "description": "Sample for GetSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "get_security_health_analytics_custom_module" - }, - "description": "Sample for GetSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListBigQueryExports" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", - "shortName": "list_big_query_exports" - }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListBigQueryExports" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", - "shortName": "list_big_query_exports" - }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_descendant_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_descendant_security_health_analytics_custom_modules" - }, - "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_descendant_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_descendant_security_health_analytics_custom_modules" - }, - "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_effective_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_effective_security_health_analytics_custom_modules" - }, - "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_effective_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_effective_security_health_analytics_custom_modules" - }, - "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListMuteConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", - "shortName": "list_mute_configs" - }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListMuteConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", - "shortName": "list_mute_configs" - }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager", - "shortName": "list_security_health_analytics_custom_modules" - }, - "description": "Sample for ListSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_security_health_analytics_custom_modules", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSecurityHealthAnalyticsCustomModules" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager", - "shortName": "list_security_health_analytics_custom_modules" - }, - "description": "Sample for ListSecurityHealthAnalyticsCustomModules", - "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.set_mute", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetMute" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "mute", - "type": "google.cloud.securitycenter_v1.types.Finding.Mute" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_mute" - }, - "description": "Sample for SetMute", - "file": "securitycenter_v1_generated_security_center_set_mute_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_mute_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.set_mute", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.SetMute", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetMute" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.SetMuteRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "mute", - "type": "google.cloud.securitycenter_v1.types.Finding.Mute" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "set_mute" - }, - "description": "Sample for SetMute", - "file": "securitycenter_v1_generated_security_center_set_mute_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_SetMute_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_set_mute_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "update_big_query_export" - }, - "description": "Sample for UpdateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_update_big_query_export_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_big_query_export_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_big_query_export", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateBigQueryExport", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateBigQueryExport" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateBigQueryExportRequest" - }, - { - "name": "big_query_export", - "type": "google.cloud.securitycenter_v1.types.BigQueryExport" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "update_big_query_export" - }, - "description": "Sample for UpdateBigQueryExport", - "file": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateBigQueryExport_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_big_query_export_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_external_system", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateExternalSystem" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" - }, - { - "name": "external_system", - "type": "google.cloud.securitycenter_v1.types.ExternalSystem" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", - "shortName": "update_external_system" - }, - "description": "Sample for UpdateExternalSystem", - "file": "securitycenter_v1_generated_security_center_update_external_system_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_external_system_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_external_system", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateExternalSystem", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateExternalSystem" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateExternalSystemRequest" - }, - { - "name": "external_system", - "type": "google.cloud.securitycenter_v1.types.ExternalSystem" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.ExternalSystem", - "shortName": "update_external_system" - }, - "description": "Sample for UpdateExternalSystem", - "file": "securitycenter_v1_generated_security_center_update_external_system_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateExternalSystem_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_external_system_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "update_mute_config" - }, - "description": "Sample for UpdateMuteConfig", - "file": "securitycenter_v1_generated_security_center_update_mute_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_async", - "segments": [ - { - "end": 54, - "start": 27, - "type": "FULL" - }, - { - "end": 54, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 48, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 51, - "start": 49, - "type": "REQUEST_EXECUTION" - }, - { - "end": 55, - "start": 52, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_mute_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_mute_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateMuteConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateMuteConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateMuteConfigRequest" - }, - { - "name": "mute_config", - "type": "google.cloud.securitycenter_v1.types.MuteConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "update_mute_config" - }, - "description": "Sample for UpdateMuteConfig", - "file": "securitycenter_v1_generated_security_center_update_mute_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateMuteConfig_sync", - "segments": [ - { - "end": 54, - "start": 27, - "type": "FULL" - }, - { - "end": 54, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 48, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 51, - "start": 49, - "type": "REQUEST_EXECUTION" - }, - { - "end": 55, - "start": 52, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_mute_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_update_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1_generated_security_center_update_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateNotificationConfig_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "update_security_health_analytics_custom_module" - }, - "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_health_analytics_custom_module", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityHealthAnalyticsCustomModule" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" - }, - { - "name": "security_health_analytics_custom_module", - "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", - "shortName": "update_security_health_analytics_custom_module" - }, - "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", - "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py b/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py deleted file mode 100644 index af2d084d..00000000 --- a/owl-bot-staging/v1/scripts/fixup_securitycenter_v1_keywords.py +++ /dev/null @@ -1,219 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'bulk_mute_findings': ('parent', 'filter', 'mute_annotation', ), - 'create_big_query_export': ('parent', 'big_query_export', 'big_query_export_id', ), - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_mute_config': ('parent', 'mute_config', 'mute_config_id', ), - 'create_notification_config': ('parent', 'config_id', 'notification_config', ), - 'create_security_health_analytics_custom_module': ('parent', 'security_health_analytics_custom_module', ), - 'create_source': ('parent', 'source', ), - 'delete_big_query_export': ('name', ), - 'delete_mute_config': ('name', ), - 'delete_notification_config': ('name', ), - 'delete_security_health_analytics_custom_module': ('name', ), - 'get_big_query_export': ('name', ), - 'get_effective_security_health_analytics_custom_module': ('name', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_mute_config': ('name', ), - 'get_notification_config': ('name', ), - 'get_organization_settings': ('name', ), - 'get_security_health_analytics_custom_module': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_big_query_exports': ('parent', 'page_size', 'page_token', ), - 'list_descendant_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_effective_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_mute_configs': ('parent', 'page_size', 'page_token', ), - 'list_notification_configs': ('parent', 'page_token', 'page_size', ), - 'list_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'set_mute': ('name', 'mute', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_big_query_export': ('big_query_export', 'update_mask', ), - 'update_external_system': ('external_system', 'update_mask', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_mute_config': ('mute_config', 'update_mask', ), - 'update_notification_config': ('notification_config', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_health_analytics_custom_module': ('security_health_analytics_custom_module', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1/setup.py b/owl-bot-staging/v1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1/testing/constraints-3.10.txt b/owl-bot-staging/v1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.11.txt b/owl-bot-staging/v1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.12.txt b/owl-bot-staging/v1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.7.txt b/owl-bot-staging/v1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1/testing/constraints-3.8.txt b/owl-bot-staging/v1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/testing/constraints-3.9.txt b/owl-bot-staging/v1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1/tests/__init__.py b/owl-bot-staging/v1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/__init__.py b/owl-bot-staging/v1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py b/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py deleted file mode 100644 index a136be02..00000000 --- a/owl-bot-staging/v1/tests/unit/gapic/securitycenter_v1/test_security_center.py +++ /dev/null @@ -1,26225 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1.services.security_center import pagers -from google.cloud.securitycenter_v1.services.security_center import transports -from google.cloud.securitycenter_v1.types import access -from google.cloud.securitycenter_v1.types import bigquery_export -from google.cloud.securitycenter_v1.types import compliance -from google.cloud.securitycenter_v1.types import connection -from google.cloud.securitycenter_v1.types import contact_details -from google.cloud.securitycenter_v1.types import container -from google.cloud.securitycenter_v1.types import database -from google.cloud.securitycenter_v1.types import effective_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import exfiltration -from google.cloud.securitycenter_v1.types import external_system -from google.cloud.securitycenter_v1.types import external_system as gcs_external_system -from google.cloud.securitycenter_v1.types import file -from google.cloud.securitycenter_v1.types import finding -from google.cloud.securitycenter_v1.types import finding as gcs_finding -from google.cloud.securitycenter_v1.types import iam_binding -from google.cloud.securitycenter_v1.types import indicator -from google.cloud.securitycenter_v1.types import kernel_rootkit -from google.cloud.securitycenter_v1.types import kubernetes -from google.cloud.securitycenter_v1.types import label -from google.cloud.securitycenter_v1.types import mitre_attack -from google.cloud.securitycenter_v1.types import mute_config -from google.cloud.securitycenter_v1.types import mute_config as gcs_mute_config -from google.cloud.securitycenter_v1.types import notification_config -from google.cloud.securitycenter_v1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1.types import organization_settings -from google.cloud.securitycenter_v1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1.types import process -from google.cloud.securitycenter_v1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_config -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module as gcs_security_health_analytics_custom_module -from google.cloud.securitycenter_v1.types import security_marks -from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1.types import securitycenter_service -from google.cloud.securitycenter_v1.types import source -from google.cloud.securitycenter_v1.types import source as gcs_source -from google.cloud.securitycenter_v1.types import vulnerability -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.BulkMuteFindingsRequest, - dict, -]) -def test_bulk_mute_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_bulk_mute_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - client.bulk_mute_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - -@pytest.mark.asyncio -async def test_bulk_mute_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.BulkMuteFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.BulkMuteFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_bulk_mute_findings_async_from_dict(): - await test_bulk_mute_findings_async(request_type=dict) - - -def test_bulk_mute_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.BulkMuteFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_bulk_mute_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.BulkMuteFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.bulk_mute_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_bulk_mute_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.bulk_mute_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_bulk_mute_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_bulk_mute_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.bulk_mute_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.bulk_mute_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_bulk_mute_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_create_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_create_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - client.create_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_async_from_dict(): - await test_create_security_health_analytics_custom_module_async(request_type=dict) - - -def test_create_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.create_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_security_health_analytics_custom_module( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - - -def test_create_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_security_health_analytics_custom_module( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateMuteConfigRequest, - dict, -]) -def test_create_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_create_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - client.create_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - -@pytest.mark.asyncio -async def test_create_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_create_mute_config_async_from_dict(): - await test_create_mute_config_async(request_type=dict) - - -def test_create_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateMuteConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - call.return_value = gcs_mute_config.MuteConfig() - client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateMuteConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - await client.create_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_mute_config( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].mute_config_id - mock_val = 'mute_config_id_value' - assert arg == mock_val - - -def test_create_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - -@pytest.mark.asyncio -async def test_create_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_mute_config( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].mute_config_id - mock_val = 'mute_config_id_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - client.create_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_create_notification_config_async_from_dict(): - await test_create_notification_config_async(request_type=dict) - - -def test_create_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - - -def test_create_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteMuteConfigRequest, - dict, -]) -def test_delete_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - client.delete_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - -@pytest.mark.asyncio -async def test_delete_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_mute_config_async_from_dict(): - await test_delete_mute_config_async(request_type=dict) - - -def test_delete_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - call.return_value = None - client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - client.delete_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_notification_config_async_from_dict(): - await test_delete_notification_config_async(request_type=dict) - - -def test_delete_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = None - client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_delete_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - client.delete_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_async_from_dict(): - await test_delete_security_health_analytics_custom_module_async(request_type=dict) - - -def test_delete_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = None - client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetBigQueryExportRequest, - dict, -]) -def test_get_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_get_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - client.get_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_get_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_get_big_query_export_async_from_dict(): - await test_get_big_query_export_async(request_type=dict) - - -def test_get_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.get_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetMuteConfigRequest, - dict, -]) -def test_get_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_get_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - client.get_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - -@pytest.mark.asyncio -async def test_get_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_get_mute_config_async_from_dict(): - await test_get_mute_config_async(request_type=dict) - - -def test_get_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - call.return_value = mute_config.MuteConfig() - client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetMuteConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) - await client.get_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_mute_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - client.get_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_get_notification_config_async_from_dict(): - await test_get_notification_config_async(request_type=dict) - - -def test_get_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = notification_config.NotificationConfig() - client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_effective_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - ) - response = client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -def test_get_effective_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - client.get_effective_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - )) - response = await client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_async_from_dict(): - await test_get_effective_security_health_analytics_custom_module_async(request_type=dict) - - -def test_get_effective_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - await client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_effective_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_effective_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_effective_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_effective_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_effective_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_effective_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_get_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - client.get_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_async_from_dict(): - await test_get_security_health_analytics_custom_module_async(request_type=dict) - - -def test_get_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.get_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_security_health_analytics_custom_module( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_descendant_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_descendant_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - client.list_descendant_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_from_dict(): - await test_list_descendant_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_descendant_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_descendant_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_descendant_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_descendant_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_descendant_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_descendant_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_descendant_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_descendant_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_descendant_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_descendant_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_descendant_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_descendant_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_descendant_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListMuteConfigsRequest, - dict, -]) -def test_list_mute_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_mute_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - client.list_mute_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - -@pytest.mark.asyncio -async def test_list_mute_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListMuteConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_mute_configs_async_from_dict(): - await test_list_mute_configs_async(request_type=dict) - - -def test_list_mute_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListMuteConfigsResponse() - client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_mute_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) - await client.list_mute_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_mute_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_mute_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_mute_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_mute_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListMuteConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_mute_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_mute_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - - -def test_list_mute_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_mute_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in results) -def test_list_mute_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_mute_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_mute_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_mute_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_mute_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_mute_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_mute_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - client.list_notification_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - -@pytest.mark.asyncio -async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) - - -def test_list_notification_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_notification_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) -def test_list_notification_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_notification_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_notification_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_effective_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_effective_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - client.list_effective_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_from_dict(): - await test_list_effective_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_effective_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_effective_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_effective_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_effective_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_effective_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_effective_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_effective_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_effective_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_effective_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_effective_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_effective_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_effective_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_effective_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_security_health_analytics_custom_modules(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_security_health_analytics_custom_modules_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - client.list_security_health_analytics_custom_modules() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_from_dict(): - await test_list_security_health_analytics_custom_modules_async(request_type=dict) - - -def test_list_security_health_analytics_custom_modules_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - await client.list_security_health_analytics_custom_modules(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_security_health_analytics_custom_modules_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_security_health_analytics_custom_modules_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_security_health_analytics_custom_modules( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_security_health_analytics_custom_modules_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_security_health_analytics_custom_modules(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) -def test_list_security_health_analytics_custom_modules_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = list(client.list_security_health_analytics_custom_modules(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_security_health_analytics_custom_modules(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_security_health_analytics_custom_modules_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_security_health_analytics_custom_modules), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_security_health_analytics_custom_modules(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetMuteRequest, - dict, -]) -def test_set_mute(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_mute_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - client.set_mute() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - -@pytest.mark.asyncio -async def test_set_mute_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetMuteRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_set_mute_async_from_dict(): - await test_set_mute_async(request_type=dict) - - -def test_set_mute_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - call.return_value = finding.Finding() - client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_mute_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_mute(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_mute_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_mute( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED - assert arg == mock_val - - -def test_set_mute_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - -@pytest.mark.asyncio -async def test_set_mute_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_mute), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_mute( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_mute_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateExternalSystemRequest, - dict, -]) -def test_update_external_system(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - ) - response = client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -def test_update_external_system_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - client.update_external_system() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - -@pytest.mark.asyncio -async def test_update_external_system_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateExternalSystemRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - )) - response = await client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -@pytest.mark.asyncio -async def test_update_external_system_async_from_dict(): - await test_update_external_system_async(request_type=dict) - - -def test_update_external_system_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() - - request.external_system.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - call.return_value = gcs_external_system.ExternalSystem() - client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'external_system.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_external_system_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() - - request.external_system.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) - await client.update_external_system(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'external_system.name=name_value', - ) in kw['metadata'] - - -def test_update_external_system_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_external_system_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_external_system_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_external_system), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_external_system.ExternalSystem()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_external_system_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateMuteConfigRequest, - dict, -]) -def test_update_mute_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - response = client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_update_mute_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - client.update_mute_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - -@pytest.mark.asyncio -async def test_update_mute_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateMuteConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - )) - response = await client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -@pytest.mark.asyncio -async def test_update_mute_config_async_from_dict(): - await test_update_mute_config_async(request_type=dict) - - -def test_update_mute_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() - - request.mute_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - call.return_value = gcs_mute_config.MuteConfig() - client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'mute_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_mute_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() - - request.mute_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - await client.update_mute_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'mute_config.name=name_value', - ) in kw['metadata'] - - -def test_update_mute_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_mute_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_mute_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_mute_config.MuteConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_mute_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - client.update_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) - - -def test_update_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -def test_update_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_update_security_health_analytics_custom_module(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - response = client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_update_security_health_analytics_custom_module_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - client.update_security_health_analytics_custom_module() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - )) - response = await client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_async_from_dict(): - await test_update_security_health_analytics_custom_module_async(request_type=dict) - - -def test_update_security_health_analytics_custom_module_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - request.security_health_analytics_custom_module.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_health_analytics_custom_module.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - - request.security_health_analytics_custom_module.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - await client.update_security_health_analytics_custom_module(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_health_analytics_custom_module.name=name_value', - ) in kw['metadata'] - - -def test_update_security_health_analytics_custom_module_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_health_analytics_custom_module( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_security_health_analytics_custom_module_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_health_analytics_custom_module), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_health_analytics_custom_module( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_health_analytics_custom_module - mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_health_analytics_custom_module_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateBigQueryExportRequest, - dict, -]) -def test_create_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_create_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - client.create_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_create_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_create_big_query_export_async_from_dict(): - await test_create_big_query_export_async(request_type=dict) - - -def test_create_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.create_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_big_query_export( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = 'big_query_export_id_value' - assert arg == mock_val - - -def test_create_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - -@pytest.mark.asyncio -async def test_create_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_big_query_export( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = 'big_query_export_id_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, - dict, -]) -def test_delete_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - client.delete_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_delete_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_big_query_export_async_from_dict(): - await test_delete_big_query_export_async(request_type=dict) - - -def test_delete_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - call.return_value = None - client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_big_query_export( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, - dict, -]) -def test_update_big_query_export(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - response = client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_update_big_query_export_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - client.update_big_query_export() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - -@pytest.mark.asyncio -async def test_update_big_query_export_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateBigQueryExportRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - )) - response = await client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -@pytest.mark.asyncio -async def test_update_big_query_export_async_from_dict(): - await test_update_big_query_export_async(request_type=dict) - - -def test_update_big_query_export_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() - - request.big_query_export.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - call.return_value = bigquery_export.BigQueryExport() - client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'big_query_export.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_big_query_export_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() - - request.big_query_export.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - await client.update_big_query_export(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'big_query_export.name=name_value', - ) in kw['metadata'] - - -def test_update_big_query_export_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_big_query_export_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_big_query_export_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_big_query_export), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(bigquery_export.BigQueryExport()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_big_query_export_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListBigQueryExportsRequest, - dict, -]) -def test_list_big_query_exports(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_big_query_exports_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - client.list_big_query_exports() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - -@pytest.mark.asyncio -async def test_list_big_query_exports_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListBigQueryExportsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_from_dict(): - await test_list_big_query_exports_async(request_type=dict) - - -def test_list_big_query_exports_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_big_query_exports_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) - await client.list_big_query_exports(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_big_query_exports_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_big_query_exports( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_big_query_exports_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_big_query_exports_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListBigQueryExportsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_big_query_exports( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_big_query_exports_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - - -def test_list_big_query_exports_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_big_query_exports(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in results) -def test_list_big_query_exports_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = list(client.list_big_query_exports(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_big_query_exports(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_big_query_exports(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.BulkMuteFindingsRequest, - dict, -]) -def test_bulk_mute_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.bulk_mute_findings(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_bulk_mute_findings_rest_required_fields(request_type=securitycenter_service.BulkMuteFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.bulk_mute_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_bulk_mute_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_bulk_mute_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.BulkMuteFindingsRequest.pb(securitycenter_service.BulkMuteFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.BulkMuteFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.bulk_mute_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_bulk_mute_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.BulkMuteFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.bulk_mute_findings(request) - - -def test_bulk_mute_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.bulk_mute_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, args[1]) - - -def test_bulk_mute_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent='parent_value', - ) - - -def test_bulk_mute_findings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_create_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_create_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "securityHealthAnalyticsCustomModule", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.create_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request_init["security_health_analytics_custom_module"] = {'name': 'name_value', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_security_health_analytics_custom_module(request) - - -def test_create_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) - - -def test_create_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_security_health_analytics_custom_module( - securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), - parent='parent_value', - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - ) - - -def test_create_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateMuteConfigRequest, - dict, -]) -def test_create_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_create_mute_config_rest_required_fields(request_type=securitycenter_service.CreateMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["mute_config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "muteConfigId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["muteConfigId"] = 'mute_config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("mute_config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == 'mute_config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_mute_config(request) - - expected_params = [ - ( - "muteConfigId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("muteConfigId", )) & set(("parent", "muteConfig", "muteConfigId", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateMuteConfigRequest.pb(securitycenter_service.CreateMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) - - request = securitycenter_service.CreateMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() - - client.create_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["mute_config"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_mute_config(request) - - -def test_create_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) - - -def test_create_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent='parent_value', - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - mute_config_id='mute_config_id_value', - ) - - -def test_create_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "configId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["configId"] = 'config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "configId" in jsonified_request - assert jsonified_request["configId"] == 'config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_notification_config(request) - - expected_params = [ - ( - "configId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.CreateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_notification_config(request) - - -def test_create_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -def test_create_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteMuteConfigRequest, - dict, -]) -def test_delete_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_mute_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_mute_config_rest_required_fields(request_type=securitycenter_service.DeleteMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_mute_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteMuteConfigRequest.pb(securitycenter_service.DeleteMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_mute_config(request) - - -def test_delete_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), - name='name_value', - ) - - -def test_delete_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_notification_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_notification_config(request) - - -def test_delete_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -def test_delete_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_delete_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_security_health_analytics_custom_module(request) - - -def test_delete_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_delete_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_security_health_analytics_custom_module( - securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_delete_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetBigQueryExportRequest, - dict, -]) -def test_get_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_get_big_query_export_rest_required_fields(request_type=securitycenter_service.GetBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetBigQueryExportRequest.pb(securitycenter_service.GetBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.GetBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.get_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_big_query_export(request) - - -def test_get_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_get_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), - name='name_value', - ) - - -def test_get_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetMuteConfigRequest, - dict, -]) -def test_get_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_get_mute_config_rest_required_fields(request_type=securitycenter_service.GetMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetMuteConfigRequest.pb(securitycenter_service.GetMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = mute_config.MuteConfig.to_json(mute_config.MuteConfig()) - - request = securitycenter_service.GetMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = mute_config.MuteConfig() - - client.get_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/muteConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_mute_config(request) - - -def test_get_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/muteConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_get_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name='name_value', - ) - - -def test_get_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) - - request = securitycenter_service.GetNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() - - client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_notification_config(request) - - -def test_get_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -def test_get_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_effective_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( - name='name_value', - enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - display_name='display_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_effective_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.enablement_state == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.display_name == 'display_name_value' - - -def test_get_effective_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_effective_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_effective_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_effective_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_effective_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_effective_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_effective_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_effective_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.to_json(effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - client.get_effective_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_effective_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_effective_security_health_analytics_custom_module(request) - - -def test_get_effective_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_effective_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}" % client.transport._host, args[1]) - - -def test_get_effective_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_effective_security_health_analytics_custom_module( - securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_get_effective_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_get_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_get_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.get_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_security_health_analytics_custom_module(request) - - -def test_get_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_get_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_security_health_analytics_custom_module( - securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), - name='name_value', - ) - - -def test_get_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_descendant_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_descendant_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_descendant_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_descendant_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_descendant_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_descendant_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_descendant_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_descendant_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_descendant_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - client.list_descendant_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_descendant_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_descendant_security_health_analytics_custom_modules(request) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_descendant_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant" % client.transport._host, args[1]) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_descendant_security_health_analytics_custom_modules( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_descendant_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_descendant_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_descendant_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListMuteConfigsRequest, - dict, -]) -def test_list_mute_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_mute_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_mute_configs_rest_required_fields(request_type=securitycenter_service.ListMuteConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_mute_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_mute_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_mute_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_mute_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_mute_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_mute_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_mute_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListMuteConfigsRequest.pb(securitycenter_service.ListMuteConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListMuteConfigsResponse.to_json(securitycenter_service.ListMuteConfigsResponse()) - - request = securitycenter_service.ListMuteConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListMuteConfigsResponse() - - client.list_mute_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_mute_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListMuteConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_mute_configs(request) - - -def test_list_mute_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_mute_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1]) - - -def test_list_mute_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), - parent='parent_value', - ) - - -def test_list_mute_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], - next_page_token='def', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_mute_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) - for i in results) - - pages = list(client.list_mute_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_notification_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_notification_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_notification_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) - - request = securitycenter_service.ListNotificationConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() - - client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_notification_configs(request) - - -def test_list_notification_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_notification_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_notification_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) - - pages = list(client.list_notification_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_effective_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_effective_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_effective_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_effective_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_effective_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_effective_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_effective_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_effective_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_effective_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_effective_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - client.list_effective_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_effective_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_effective_security_health_analytics_custom_modules(request) - - -def test_list_effective_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_effective_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules" % client.transport._host, args[1]) - - -def test_list_effective_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_effective_security_health_analytics_custom_modules( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_effective_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( - effective_security_health_analytics_custom_modules=[ - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_effective_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_effective_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, - dict, -]) -def test_list_security_health_analytics_custom_modules_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_security_health_analytics_custom_modules(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_security_health_analytics_custom_modules_rest_required_fields(request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_security_health_analytics_custom_modules._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_security_health_analytics_custom_modules(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_security_health_analytics_custom_modules_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_security_health_analytics_custom_modules._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_security_health_analytics_custom_modules_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_security_health_analytics_custom_modules") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_security_health_analytics_custom_modules") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse()) - - request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - client.list_security_health_analytics_custom_modules(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_security_health_analytics_custom_modules_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_security_health_analytics_custom_modules(request) - - -def test_list_security_health_analytics_custom_modules_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_security_health_analytics_custom_modules(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" % client.transport._host, args[1]) - - -def test_list_security_health_analytics_custom_modules_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_security_health_analytics_custom_modules( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), - parent='parent_value', - ) - - -def test_list_security_health_analytics_custom_modules_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[], - next_page_token='def', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( - security_health_analytics_custom_modules=[ - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/securityHealthAnalyticsSettings'} - - pager = client.list_security_health_analytics_custom_modules(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - for i in results) - - pages = list(client.list_security_health_analytics_custom_modules(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetMuteRequest, - dict, -]) -def test_set_mute_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_mute(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_set_mute_rest_required_fields(request_type=securitycenter_service.SetMuteRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_mute._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_mute(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_mute_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_mute._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "mute", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_mute_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_mute") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_mute") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetMuteRequest.pb(securitycenter_service.SetMuteRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetMuteRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_mute(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_mute_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetMuteRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_mute(request) - - -def test_set_mute_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_mute(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" % client.transport._host, args[1]) - - -def test_set_mute_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name='name_value', - mute=finding.Finding.Mute.MUTED, - ) - - -def test_set_mute_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateExternalSystemRequest, - dict, -]) -def test_update_external_system_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem( - name='name_value', - assignees=['assignees_value'], - external_uid='external_uid_value', - status='status_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_external_system(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) - assert response.name == 'name_value' - assert response.assignees == ['assignees_value'] - assert response.external_uid == 'external_uid_value' - assert response.status == 'status_value' - - -def test_update_external_system_rest_required_fields(request_type=securitycenter_service.UpdateExternalSystemRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_external_system._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_external_system(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_external_system_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_external_system._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("externalSystem", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_external_system_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_external_system") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_external_system") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateExternalSystemRequest.pb(securitycenter_service.UpdateExternalSystemRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_external_system.ExternalSystem.to_json(gcs_external_system.ExternalSystem()) - - request = securitycenter_service.UpdateExternalSystemRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_external_system.ExternalSystem() - - client.update_external_system(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_external_system_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateExternalSystemRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - request_init["external_system"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4', 'assignees': ['assignees_value1', 'assignees_value2'], 'external_uid': 'external_uid_value', 'status': 'status_value', 'external_system_update_time': {'seconds': 751, 'nanos': 543}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_external_system(request) - - -def test_update_external_system_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() - - # get arguments that satisfy an http rule for this method - sample_request = {'external_system': {'name': 'organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4'}} - - # get truthy value for each flattened field - mock_args = dict( - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_external_system(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" % client.transport._host, args[1]) - - -def test_update_external_system_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_external_system_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator='mute_initiator_value', - parent_display_name='parent_display_name_value', - description='description_value', - next_steps='next_steps_value', - module_name='module_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == 'mute_initiator_value' - assert response.parent_display_name == 'parent_display_name_value' - assert response.description == 'description_value' - assert response.next_steps == 'next_steps_value' - assert response.module_name == 'module_name_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value', 'mute': 1, 'finding_class': 1, 'indicator': {'ip_addresses': ['ip_addresses_value1', 'ip_addresses_value2'], 'domains': ['domains_value1', 'domains_value2'], 'signatures': [{'memory_hash_signature': {'binary_family': 'binary_family_value', 'detections': [{'binary': 'binary_value', 'percent_pages_matched': 0.2197}]}, 'yara_rule_signature': {'yara_rule': 'yara_rule_value'}}], 'uris': ['uris_value1', 'uris_value2']}, 'vulnerability': {'cve': {'id': 'id_value', 'references': [{'source': 'source_value', 'uri': 'uri_value'}], 'cvssv3': {'base_score': 0.1046, 'attack_vector': 1, 'attack_complexity': 1, 'privileges_required': 1, 'user_interaction': 1, 'scope': 1, 'confidentiality_impact': 1, 'integrity_impact': 1, 'availability_impact': 1}, 'upstream_fix_available': True}}, 'mute_update_time': {}, 'external_systems': {}, 'mitre_attack': {'primary_tactic': 1, 'primary_techniques': [1], 'additional_tactics': [1], 'additional_techniques': [1], 'version': 'version_value'}, 'access': {'principal_email': 'principal_email_value', 'caller_ip': 'caller_ip_value', 'caller_ip_geo': {'region_code': 'region_code_value'}, 'user_agent_family': 'user_agent_family_value', 'service_name': 'service_name_value', 'method_name': 'method_name_value', 'principal_subject': 'principal_subject_value', 'service_account_key_name': 'service_account_key_name_value', 'service_account_delegation_info': [{'principal_email': 'principal_email_value', 'principal_subject': 'principal_subject_value'}], 'user_name': 'user_name_value'}, 'connections': [{'destination_ip': 'destination_ip_value', 'destination_port': 1734, 'source_ip': 'source_ip_value', 'source_port': 1205, 'protocol': 1}], 'mute_initiator': 'mute_initiator_value', 'processes': [{'name': 'name_value', 'binary': {'path': 'path_value', 'size': 443, 'sha256': 'sha256_value', 'hashed_size': 1159, 'partially_hashed': True, 'contents': 'contents_value'}, 'libraries': {}, 'script': {}, 'args': ['args_value1', 'args_value2'], 'arguments_truncated': True, 'env_variables': [{'name': 'name_value', 'val': 'val_value'}], 'env_variables_truncated': True, 'pid': 317, 'parent_pid': 1062}], 'contacts': {}, 'compliances': [{'standard': 'standard_value', 'version': 'version_value', 'ids': ['ids_value1', 'ids_value2']}], 'parent_display_name': 'parent_display_name_value', 'description': 'description_value', 'exfiltration': {'sources': [{'name': 'name_value', 'components': ['components_value1', 'components_value2']}], 'targets': {}}, 'iam_bindings': [{'action': 1, 'role': 'role_value', 'member': 'member_value'}], 'next_steps': 'next_steps_value', 'module_name': 'module_name_value', 'containers': [{'name': 'name_value', 'uri': 'uri_value', 'image_id': 'image_id_value', 'labels': [{'name': 'name_value', 'value': 'value_value'}]}], 'kubernetes': {'pods': [{'ns': 'ns_value', 'name': 'name_value', 'labels': {}, 'containers': {}}], 'nodes': [{'name': 'name_value'}], 'node_pools': [{'name': 'name_value', 'nodes': {}}], 'roles': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}], 'bindings': [{'ns': 'ns_value', 'name': 'name_value', 'role': {}, 'subjects': [{'kind': 1, 'ns': 'ns_value', 'name': 'name_value'}]}], 'access_reviews': [{'group': 'group_value', 'ns': 'ns_value', 'name': 'name_value', 'resource': 'resource_value', 'subresource': 'subresource_value', 'verb': 'verb_value', 'version': 'version_value'}]}, 'database': {'name': 'name_value', 'display_name': 'display_name_value', 'user_name': 'user_name_value', 'query': 'query_value', 'grantees': ['grantees_value1', 'grantees_value2']}, 'files': {}, 'kernel_rootkit': {'name': 'name_value', 'unexpected_code_modification': True, 'unexpected_read_only_data_modification': True, 'unexpected_ftrace_handler': True, 'unexpected_kprobe_handler': True, 'unexpected_kernel_code_pages': True, 'unexpected_system_call_handler': True, 'unexpected_interrupt_handler': True, 'unexpected_processes_in_runqueue': True}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateMuteConfigRequest, - dict, -]) -def test_update_mute_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( - name='name_value', - display_name='display_name_value', - description='description_value', - filter='filter_value', - most_recent_editor='most_recent_editor_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_mute_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.most_recent_editor == 'most_recent_editor_value' - - -def test_update_mute_config_rest_required_fields(request_type=securitycenter_service.UpdateMuteConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_mute_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_mute_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("muteConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_mute_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_mute_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_mute_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateMuteConfigRequest.pb(securitycenter_service.UpdateMuteConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json(gcs_mute_config.MuteConfig()) - - request = securitycenter_service.UpdateMuteConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() - - client.update_mute_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_mute_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateMuteConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - request_init["mute_config"] = {'name': 'organizations/sample1/muteConfigs/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'filter': 'filter_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_mute_config(request) - - -def test_update_mute_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'mute_config': {'name': 'organizations/sample1/muteConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" % client.transport._host, args[1]) - - -def test_update_mute_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.UpdateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_notification_config(request) - - -def test_update_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, - dict, -]) -def test_update_security_health_analytics_custom_module_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( - name='name_value', - display_name='display_name_value', - enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, - last_editor='last_editor_value', - ancestor_module='ancestor_module_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_health_analytics_custom_module(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.enablement_state == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED - assert response.last_editor == 'last_editor_value' - assert response.ancestor_module == 'ancestor_module_value' - - -def test_update_security_health_analytics_custom_module_rest_required_fields(request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_health_analytics_custom_module._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_health_analytics_custom_module(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_health_analytics_custom_module_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_health_analytics_custom_module._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("securityHealthAnalyticsCustomModule", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_health_analytics_custom_module_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_health_analytics_custom_module") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_health_analytics_custom_module") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb(securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json(gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule()) - - request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - client.update_security_health_analytics_custom_module(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_health_analytics_custom_module_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - request_init["security_health_analytics_custom_module"] = {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2', 'display_name': 'display_name_value', 'enablement_state': 1, 'update_time': {'seconds': 751, 'nanos': 543}, 'last_editor': 'last_editor_value', 'ancestor_module': 'ancestor_module_value', 'custom_config': {'predicate': {'expression': 'expression_value', 'title': 'title_value', 'description': 'description_value', 'location': 'location_value'}, 'custom_output': {'properties': [{'name': 'name_value', 'value_expression': {}}]}, 'resource_selector': {'resource_types': ['resource_types_value1', 'resource_types_value2']}, 'severity': 1, 'description': 'description_value', 'recommendation': 'recommendation_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_health_analytics_custom_module(request) - - -def test_update_security_health_analytics_custom_module_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_health_analytics_custom_module': {'name': 'organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_health_analytics_custom_module(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1]) - - -def test_update_security_health_analytics_custom_module_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_health_analytics_custom_module( - securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), - security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_security_health_analytics_custom_module_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateBigQueryExportRequest, - dict, -]) -def test_create_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_create_big_query_export_rest_required_fields(request_type=securitycenter_service.CreateBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["big_query_export_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "bigQueryExportId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "bigQueryExportId" in jsonified_request - assert jsonified_request["bigQueryExportId"] == request_init["big_query_export_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["bigQueryExportId"] = 'big_query_export_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_big_query_export._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("big_query_export_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "bigQueryExportId" in jsonified_request - assert jsonified_request["bigQueryExportId"] == 'big_query_export_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_big_query_export(request) - - expected_params = [ - ( - "bigQueryExportId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(("bigQueryExportId", )) & set(("parent", "bigQueryExport", "bigQueryExportId", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateBigQueryExportRequest.pb(securitycenter_service.CreateBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.CreateBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.create_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["big_query_export"] = {'name': 'name_value', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_big_query_export(request) - - -def test_create_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) - - -def test_create_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent='parent_value', - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - big_query_export_id='big_query_export_id_value', - ) - - -def test_create_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, - dict, -]) -def test_delete_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_big_query_export(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_big_query_export_rest_required_fields(request_type=securitycenter_service.DeleteBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_big_query_export") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteBigQueryExportRequest.pb(securitycenter_service.DeleteBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/bigQueryExports/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_big_query_export(request) - - -def test_delete_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/bigQueryExports/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_delete_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name='name_value', - ) - - -def test_delete_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, - dict, -]) -def test_update_big_query_export_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( - name='name_value', - description='description_value', - filter='filter_value', - dataset='dataset_value', - most_recent_editor='most_recent_editor_value', - principal='principal_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_big_query_export(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.filter == 'filter_value' - assert response.dataset == 'dataset_value' - assert response.most_recent_editor == 'most_recent_editor_value' - assert response.principal == 'principal_value' - - -def test_update_big_query_export_rest_required_fields(request_type=securitycenter_service.UpdateBigQueryExportRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_big_query_export._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_big_query_export(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_big_query_export_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_big_query_export._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("bigQueryExport", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_big_query_export_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_big_query_export") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_big_query_export") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateBigQueryExportRequest.pb(securitycenter_service.UpdateBigQueryExportRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json(bigquery_export.BigQueryExport()) - - request = securitycenter_service.UpdateBigQueryExportRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() - - client.update_big_query_export(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_big_query_export_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateBigQueryExportRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - request_init["big_query_export"] = {'name': 'organizations/sample1/bigQueryExports/sample2', 'description': 'description_value', 'filter': 'filter_value', 'dataset': 'dataset_value', 'create_time': {'seconds': 751, 'nanos': 543}, 'update_time': {}, 'most_recent_editor': 'most_recent_editor_value', 'principal': 'principal_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_big_query_export(request) - - -def test_update_big_query_export_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() - - # get arguments that satisfy an http rule for this method - sample_request = {'big_query_export': {'name': 'organizations/sample1/bigQueryExports/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_big_query_export(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{big_query_export.name=organizations/*/bigQueryExports/*}" % client.transport._host, args[1]) - - -def test_update_big_query_export_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_big_query_export_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListBigQueryExportsRequest, - dict, -]) -def test_list_big_query_exports_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_big_query_exports(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_big_query_exports_rest_required_fields(request_type=securitycenter_service.ListBigQueryExportsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_big_query_exports._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_big_query_exports(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_big_query_exports_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_big_query_exports._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_big_query_exports_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_big_query_exports") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_big_query_exports") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListBigQueryExportsRequest.pb(securitycenter_service.ListBigQueryExportsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListBigQueryExportsResponse.to_json(securitycenter_service.ListBigQueryExportsResponse()) - - request = securitycenter_service.ListBigQueryExportsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListBigQueryExportsResponse() - - client.list_big_query_exports(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_big_query_exports_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListBigQueryExportsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_big_query_exports(request) - - -def test_list_big_query_exports_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListBigQueryExportsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListBigQueryExportsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_big_query_exports(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1/{parent=organizations/*}/bigQueryExports" % client.transport._host, args[1]) - - -def test_list_big_query_exports_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent='parent_value', - ) - - -def test_list_big_query_exports_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token='abc', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token='def', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListBigQueryExportsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_big_query_exports(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) - for i in results) - - pages = list(client.list_big_query_exports(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'bulk_mute_findings', - 'create_security_health_analytics_custom_module', - 'create_source', - 'create_finding', - 'create_mute_config', - 'create_notification_config', - 'delete_mute_config', - 'delete_notification_config', - 'delete_security_health_analytics_custom_module', - 'get_big_query_export', - 'get_iam_policy', - 'get_mute_config', - 'get_notification_config', - 'get_organization_settings', - 'get_effective_security_health_analytics_custom_module', - 'get_security_health_analytics_custom_module', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_descendant_security_health_analytics_custom_modules', - 'list_findings', - 'list_mute_configs', - 'list_notification_configs', - 'list_effective_security_health_analytics_custom_modules', - 'list_security_health_analytics_custom_modules', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_mute', - 'set_iam_policy', - 'test_iam_permissions', - 'update_external_system', - 'update_finding', - 'update_mute_config', - 'update_notification_config', - 'update_organization_settings', - 'update_security_health_analytics_custom_module', - 'update_source', - 'update_security_marks', - 'create_big_query_export', - 'delete_big_query_export', - 'update_big_query_export', - 'list_big_query_exports', - 'get_operation', - 'cancel_operation', - 'delete_operation', - 'list_operations', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.bulk_mute_findings._session - session2 = client2.transport.bulk_mute_findings._session - assert session1 != session2 - session1 = client1.transport.create_security_health_analytics_custom_module._session - session2 = client2.transport.create_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.create_mute_config._session - session2 = client2.transport.create_mute_config._session - assert session1 != session2 - session1 = client1.transport.create_notification_config._session - session2 = client2.transport.create_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_mute_config._session - session2 = client2.transport.delete_mute_config._session - assert session1 != session2 - session1 = client1.transport.delete_notification_config._session - session2 = client2.transport.delete_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_security_health_analytics_custom_module._session - session2 = client2.transport.delete_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_big_query_export._session - session2 = client2.transport.get_big_query_export._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_mute_config._session - session2 = client2.transport.get_mute_config._session - assert session1 != session2 - session1 = client1.transport.get_notification_config._session - session2 = client2.transport.get_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_effective_security_health_analytics_custom_module._session - session2 = client2.transport.get_effective_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_security_health_analytics_custom_module._session - session2 = client2.transport.get_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_descendant_security_health_analytics_custom_modules._session - session2 = client2.transport.list_descendant_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_mute_configs._session - session2 = client2.transport.list_mute_configs._session - assert session1 != session2 - session1 = client1.transport.list_notification_configs._session - session2 = client2.transport.list_notification_configs._session - assert session1 != session2 - session1 = client1.transport.list_effective_security_health_analytics_custom_modules._session - session2 = client2.transport.list_effective_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_security_health_analytics_custom_modules._session - session2 = client2.transport.list_security_health_analytics_custom_modules._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_mute._session - session2 = client2.transport.set_mute._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_external_system._session - session2 = client2.transport.update_external_system._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_mute_config._session - session2 = client2.transport.update_mute_config._session - assert session1 != session2 - session1 = client1.transport.update_notification_config._session - session2 = client2.transport.update_notification_config._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_security_health_analytics_custom_module._session - session2 = client2.transport.update_security_health_analytics_custom_module._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 - session1 = client1.transport.create_big_query_export._session - session2 = client2.transport.create_big_query_export._session - assert session1 != session2 - session1 = client1.transport.delete_big_query_export._session - session2 = client2.transport.delete_big_query_export._session - assert session1 != session2 - session1 = client1.transport.update_big_query_export._session - session2 = client2.transport.update_big_query_export._session - assert session1 != session2 - session1 = client1.transport.list_big_query_exports._session - session2 = client2.transport.list_big_query_exports._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_big_query_export_path(): - organization = "oyster" - export = "nudibranch" - expected = "organizations/{organization}/bigQueryExports/{export}".format(organization=organization, export=export, ) - actual = SecurityCenterClient.big_query_export_path(organization, export) - assert expected == actual - - -def test_parse_big_query_export_path(): - expected = { - "organization": "cuttlefish", - "export": "mussel", - } - path = SecurityCenterClient.big_query_export_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_big_query_export_path(path) - assert expected == actual - -def test_effective_security_health_analytics_custom_module_path(): - organization = "winkle" - effective_custom_module = "nautilus" - expected = "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format(organization=organization, effective_custom_module=effective_custom_module, ) - actual = SecurityCenterClient.effective_security_health_analytics_custom_module_path(organization, effective_custom_module) - assert expected == actual - - -def test_parse_effective_security_health_analytics_custom_module_path(): - expected = { - "organization": "scallop", - "effective_custom_module": "abalone", - } - path = SecurityCenterClient.effective_security_health_analytics_custom_module_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path(path) - assert expected == actual - -def test_external_system_path(): - organization = "squid" - source = "clam" - finding = "whelk" - externalsystem = "octopus" - expected = "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format(organization=organization, source=source, finding=finding, externalsystem=externalsystem, ) - actual = SecurityCenterClient.external_system_path(organization, source, finding, externalsystem) - assert expected == actual - - -def test_parse_external_system_path(): - expected = { - "organization": "oyster", - "source": "nudibranch", - "finding": "cuttlefish", - "externalsystem": "mussel", - } - path = SecurityCenterClient.external_system_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_external_system_path(path) - assert expected == actual - -def test_finding_path(): - organization = "winkle" - source = "nautilus" - finding = "scallop" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "abalone", - "source": "squid", - "finding": "clam", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_mute_config_path(): - organization = "whelk" - mute_config = "octopus" - expected = "organizations/{organization}/muteConfigs/{mute_config}".format(organization=organization, mute_config=mute_config, ) - actual = SecurityCenterClient.mute_config_path(organization, mute_config) - assert expected == actual - - -def test_parse_mute_config_path(): - expected = { - "organization": "oyster", - "mute_config": "nudibranch", - } - path = SecurityCenterClient.mute_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_mute_config_path(path) - assert expected == actual - -def test_notification_config_path(): - organization = "cuttlefish" - notification_config = "mussel" - expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - actual = SecurityCenterClient.notification_config_path(organization, notification_config) - assert expected == actual - - -def test_parse_notification_config_path(): - expected = { - "organization": "winkle", - "notification_config": "nautilus", - } - path = SecurityCenterClient.notification_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_notification_config_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "scallop" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "abalone", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_health_analytics_custom_module_path(): - organization = "squid" - custom_module = "clam" - expected = "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format(organization=organization, custom_module=custom_module, ) - actual = SecurityCenterClient.security_health_analytics_custom_module_path(organization, custom_module) - assert expected == actual - - -def test_parse_security_health_analytics_custom_module_path(): - expected = { - "organization": "whelk", - "custom_module": "octopus", - } - path = SecurityCenterClient.security_health_analytics_custom_module_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_health_analytics_custom_module_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "oyster" - asset = "nudibranch" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "cuttlefish", - "asset": "mussel", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "winkle" - source = "nautilus" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "scallop", - "source": "abalone", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_topic_path(): - project = "squid" - topic = "clam" - expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - actual = SecurityCenterClient.topic_path(project, topic) - assert expected == actual - - -def test_parse_topic_path(): - expected = { - "project": "whelk", - "topic": "octopus", - } - path = SecurityCenterClient.topic_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_topic_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nudibranch", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "mussel", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "winkle" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "nautilus", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "scallop" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "abalone", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "squid" - location = "clam" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "whelk", - "location": "octopus", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_cancel_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.CancelOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.cancel_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.CancelOperationRequest, - dict, -]) -def test_cancel_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '{}' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.cancel_operation(request) - - # Establish that the response is the type that we expect. - assert response is None - -def test_delete_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.DeleteOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.DeleteOperationRequest, - dict, -]) -def test_delete_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '{}' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_operation(request) - - # Establish that the response is the type that we expect. - assert response is None - -def test_get_operation_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.GetOperationRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations/sample2'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_operation(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.GetOperationRequest, - dict, -]) -def test_get_operation_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations/sample2'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_operation(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) - -def test_list_operations_rest_bad_request(transport: str = 'rest', request_type=operations_pb2.ListOperationsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - request = request_type() - request = json_format.ParseDict({'name': 'organizations/sample1/operations'}, request) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_operations(request) - -@pytest.mark.parametrize("request_type", [ - operations_pb2.ListOperationsRequest, - dict, -]) -def test_list_operations_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request_init = {'name': 'organizations/sample1/operations'} - request = request_type(**request_init) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.ListOperationsResponse() - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_operations(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) - - -def test_delete_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.DeleteOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None -@pytest.mark.asyncio -async def test_delete_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.DeleteOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None - -def test_delete_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.DeleteOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - call.return_value = None - - client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_delete_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.DeleteOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - await client.delete_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_delete_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - - response = client.delete_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_delete_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.delete_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.delete_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_cancel_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.CancelOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None -@pytest.mark.asyncio -async def test_cancel_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.CancelOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert response is None - -def test_cancel_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.CancelOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - call.return_value = None - - client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_cancel_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.CancelOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - await client.cancel_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_cancel_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = None - - response = client.cancel_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_cancel_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.cancel_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - None - ) - response = await client.cancel_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_get_operation(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.GetOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation() - response = client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) -@pytest.mark.asyncio -async def test_get_operation_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.GetOperationRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - response = await client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.Operation) - -def test_get_operation_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.GetOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - call.return_value = operations_pb2.Operation() - - client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_get_operation_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.GetOperationRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - await client.get_operation(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_get_operation_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation() - - response = client.get_operation( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_get_operation_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_operation), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation() - ) - response = await client.get_operation( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_list_operations(transport: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.ListOperationsRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.ListOperationsResponse() - response = client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) -@pytest.mark.asyncio -async def test_list_operations_async(transport: str = "grpc"): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = operations_pb2.ListOperationsRequest() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - response = await client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the response is the type that we expect. - assert isinstance(response, operations_pb2.ListOperationsResponse) - -def test_list_operations_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.ListOperationsRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - call.return_value = operations_pb2.ListOperationsResponse() - - client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] -@pytest.mark.asyncio -async def test_list_operations_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = operations_pb2.ListOperationsRequest() - request.name = "locations" - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - await client.list_operations(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ("x-goog-request-params", "name=locations",) in kw["metadata"] - -def test_list_operations_from_dict(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.ListOperationsResponse() - - response = client.list_operations( - request={ - "name": "locations", - } - ) - call.assert_called() -@pytest.mark.asyncio -async def test_list_operations_from_dict_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_operations), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.ListOperationsResponse() - ) - response = await client.list_operations( - request={ - "name": "locations", - } - ) - call.assert_called() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1beta1/.coveragerc b/owl-bot-staging/v1beta1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1beta1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1beta1/.flake8 b/owl-bot-staging/v1beta1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1beta1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1beta1/MANIFEST.in b/owl-bot-staging/v1beta1/MANIFEST.in deleted file mode 100644 index 328e3b89..00000000 --- a/owl-bot-staging/v1beta1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1beta1 *.py diff --git a/owl-bot-staging/v1beta1/README.rst b/owl-bot-staging/v1beta1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1beta1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1beta1/docs/conf.py b/owl-bot-staging/v1beta1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1beta1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1beta1/docs/index.rst b/owl-bot-staging/v1beta1/docs/index.rst deleted file mode 100644 index 88360626..00000000 --- a/owl-bot-staging/v1beta1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1beta1/services - securitycenter_v1beta1/types diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst deleted file mode 100644 index 304849ec..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1beta1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst deleted file mode 100644 index a09a4b86..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1beta1 API -==================================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst b/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst deleted file mode 100644 index 0bbeba06..00000000 --- a/owl-bot-staging/v1beta1/docs/securitycenter_v1beta1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1beta1 API -================================================= - -.. automodule:: google.cloud.securitycenter_v1beta1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index 51dcecf3..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1beta1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1beta1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1beta1.types.asset import Asset -from google.cloud.securitycenter_v1beta1.types.finding import Finding -from google.cloud.securitycenter_v1beta1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1beta1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1beta1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1beta1.types.source import Source - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Asset', - 'Finding', - 'OrganizationSettings', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py deleted file mode 100644 index e12212ee..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.asset import Asset -from .types.finding import Finding -from .types.organization_settings import OrganizationSettings -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source - -__all__ = ( - 'SecurityCenterAsyncClient', -'Asset', -'CreateFindingRequest', -'CreateSourceRequest', -'Finding', -'GetOrganizationSettingsRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'ListAssetsRequest', -'ListAssetsResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'OrganizationSettings', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityMarks', -'SetFindingStateRequest', -'Source', -'UpdateFindingRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json deleted file mode 100644 index afd9dcb0..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_metadata.json +++ /dev/null @@ -1,298 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1beta1", - "protoPackage": "google.cloud.securitycenter.v1beta1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py deleted file mode 100644 index ec8dc818..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/async_client.py +++ /dev/null @@ -1,2406 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1 Beta APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". - To groupBy across all sources provide a source_id of - ``-``. For example: - organizations/{organization_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state``). The string value - should follow SQL syntax: comma separated list of - fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated - empty messages in your APIs. A typical example is to - use it as the request or the response type of an API - method. For instance: - - service Foo { - rpc Bar(google.protobuf.Empty) returns - (google.protobuf.Empty); - - } - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - empty_pb2.Empty, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1beta1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1beta1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1beta1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1beta1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1beta1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py deleted file mode 100644 index f2b32f05..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/client.py +++ /dev/null @@ -1,2585 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1 Beta APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be alphanumeric and less than or - equal to 32 characters and greater than - 0 characters in length. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". - To groupBy across all sources provide a source_id of - ``-``. For example: - organizations/{organization_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state``). The string value - should follow SQL syntax: comma separated list of - fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be :class:`google.protobuf.empty_pb2.Empty` A generic empty message that you can re-use to avoid defining duplicated - empty messages in your APIs. A typical example is to - use it as the request or the response type of an API - method. For instance: - - service Foo { - rpc Bar(google.protobuf.Empty) returns - (google.protobuf.Empty); - - } - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - empty_pb2.Empty, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1beta1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py deleted file mode 100644 index 75b8f79f..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/pagers.py +++ /dev/null @@ -1,625 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``findings`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``findings`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[finding.Finding]: - for page in self.pages: - yield from page.findings - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``findings`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``findings`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[finding.Finding]: - async def async_generator(): - async for page in self.pages: - for response in page.findings: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py deleted file mode 100644 index 67f98e00..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/base.py +++ /dev/null @@ -1,465 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1beta1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py deleted file mode 100644 index 09e8e582..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,754 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - self.grpc_channel.close() - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 787c4fd4..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,753 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - return self.grpc_channel.close() - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py deleted file mode 100644 index 5b741462..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/services/security_center/transports/rest.py +++ /dev/null @@ -1,2570 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1 Beta APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1beta1/{name=organizations/*/operations/*}:cancel', - 'body': '*', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1beta1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1beta1/{parent=organizations/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1beta1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py deleted file mode 100644 index d0d3788c..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/__init__.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- 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. -# -from .asset import ( - Asset, -) -from .finding import ( - Finding, -) -from .organization_settings import ( - OrganizationSettings, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - CreateFindingRequest, - CreateSourceRequest, - GetOrganizationSettingsRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListFindingsRequest, - ListFindingsResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - UpdateFindingRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) - -__all__ = ( - 'Asset', - 'Finding', - 'OrganizationSettings', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py deleted file mode 100644 index a5809052..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/asset.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1beta1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated, - added, or deleted in Security Command Center. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - Immutable. The full resource name of the Google Cloud - resource this asset represents. This field is immutable - after create time. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py deleted file mode 100644 index 4a146544..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/finding.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data (security, risk, health - or privacy) ingested into Security Command Center for - presentation, notification, analysis, policy testing, and - enforcement. For example, an XSS vulnerability in an App Engine - application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - Immutable. The relative resource name of the source the - finding belongs to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the event took place, or - when an update to the finding occurred. For - example, if the finding represents an open - firewall it would capture the time the detector - believes the firewall became open. The accuracy - is determined by the detector. If the finding - were to be resolved afterward, this time would - reflect when the finding was resolved. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py deleted file mode 100644 index d58da929..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/organization_settings.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py deleted file mode 100644 index 6014fa5e..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py deleted file mode 100644 index 437c4844..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/security_marks.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py deleted file mode 100644 index 3002ea9b..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/securitycenter_service.py +++ /dev/null @@ -1,1053 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1beta1.types import asset as gcs_asset -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'CreateFindingRequest', - 'CreateSourceRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'RunAssetDiscoveryRequest', - 'UpdateFindingRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - }, -) - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - alphanumeric and less than or equal to 32 - characters and greater than 0 characters in - length. - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. Name of the organization to groupBy. Its format is - "organizations/[organization_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``resource_properties.size = 100`` is a valid - filter string. - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_type - - security_center_properties.resource_parent - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the Asset's "state" property - is updated to indicate whether the asset was added, removed, - or remained present during the compare_duration period of - time that precedes the read_time. This is the time between - (read_time - compare_duration) and read_time. - - The state value is derived based on the presence of the - asset at the two points in time. Intermediate state changes - between the two times don't affect the result. For example, - the results aren't affected if the asset is removed and - re-created again. - - Possible "state" values when compare_duration is specified: - - - "ADDED": indicates that the asset was not present before - compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - This field is ignored if ``state`` is not a field in - ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]". To - groupBy across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``source_properties.size = 100`` is a valid - filter string. - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state``). The string value should - follow SQL syntax: comma separated list of fields. For - example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=5, - ) - page_size: int = proto.Field( - proto.INT32, - number=6, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1beta1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. Name of the organization assets should belong to. - Its format is "organizations/[organization_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``resource_properties.size = 100`` is a valid - filter string. - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetResult's "state" - attribute is updated to indicate whether the asset was - added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state value is derived based on the presence of the - asset at the two points in time. Intermediate state changes - between the two times don't affect the result. For example, - the results aren't affected if the asset is removed and - re-created again. - - Possible "state" values when compare_duration is specified: - - - "ADDED": indicates that the asset was not present before - compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state is "UNUSED", which indicates that the asset is present - at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - Optional. A field mask to specify the - ListAssetsResult fields to be listed in the - response. An empty field mask will list all - fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1beta1.types.Asset): - Asset matching the search request. - state (google.cloud.securitycenter_v1beta1.types.ListAssetsResponse.ListAssetsResult.State): - State of the asset. - """ - class State(proto.Enum): - r"""State of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state should be: UNUSED - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - UNUSED (1): - Request did not specify use of this field in - the result. - ADDED (2): - Asset was added between the points in time. - REMOVED (3): - Asset was removed between the points in time. - ACTIVE (4): - Asset was active at both point(s) in time. - """ - STATE_UNSPECIFIED = 0 - UNUSED = 1 - ADDED = 2 - REMOVED = 3 - ACTIVE = 4 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state: 'ListAssetsResponse.ListAssetsResult.State' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.State', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id]". To - list across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are not supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - For example, ``source_properties.size = 100`` is a valid - filter string. - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - Optional. A field mask to specify the Finding - fields to be listed in the response. An empty - field mask will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=5, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=6, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - findings (MutableSequence[google.cloud.securitycenter_v1beta1.types.Finding]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - @property - def raw_page(self): - return self - - findings: MutableSequence[gcs_finding.Finding] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The relative resource name of the finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - state (google.cloud.securitycenter_v1beta1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - finding resource. This field should not be - specified when creating a finding. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1beta1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1beta1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1beta1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - security marks resource. - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py b/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py deleted file mode 100644 index df1b06d0..00000000 --- a/owl-bot-staging/v1beta1/google/cloud/securitycenter_v1beta1/types/source.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1beta1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, etc. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and - outdated/insecure libraries.". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1beta1/mypy.ini b/owl-bot-staging/v1beta1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1beta1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1beta1/noxfile.py b/owl-bot-staging/v1beta1/noxfile.py deleted file mode 100644 index 3a5d7759..00000000 --- a/owl-bot-staging/v1beta1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1beta1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py deleted file mode 100644 index 16c9f9ca..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 5e9622dd..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py deleted file mode 100644 index 2e0ee1f0..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py deleted file mode 100644 index 3e58b73c..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index 382ce3d5..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 50a057a4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index 82ccf1eb..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index d6b90e79..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py deleted file mode 100644 index b46faa07..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py deleted file mode 100644 index eb56d38d..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py deleted file mode 100644 index e61fe1d2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 91b5495d..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py deleted file mode 100644 index b999ac21..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py deleted file mode 100644 index ed1728b4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py deleted file mode 100644 index 51c33255..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 7504427b..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py deleted file mode 100644 index 26091eec..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py deleted file mode 100644 index 9d5b95c6..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py deleted file mode 100644 index 14530f85..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py deleted file mode 100644 index fcea7e74..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index 856c1087..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index f38b2d3a..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index fb598fda..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index f7e2f41f..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index c2954da2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index 78e1f4ec..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index 78f7f4e4..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index 3de02a54..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py deleted file mode 100644 index 207d45ef..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py deleted file mode 100644 index 6372ddb2..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index 3a930b97..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index eaa43ba9..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 7ad9a249..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index b620d717..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py deleted file mode 100644 index b55b9c80..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py deleted file mode 100644 index 16168c1b..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/securitycenter_v1beta1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1beta1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json b/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json deleted file mode 100644 index a4c1295e..00000000 --- a/owl-bot-staging/v1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json +++ /dev/null @@ -1,2945 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1beta1", - "version": "v1beta1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1beta1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1beta1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1beta1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1beta1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1beta1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1beta1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1beta1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1beta1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1beta1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListFindingsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1beta1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1beta1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1beta1.types.SecurityMarks" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1beta1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1beta1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1beta1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1beta1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1beta1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py b/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py deleted file mode 100644 index 7b743d2a..00000000 --- a/owl-bot-staging/v1beta1/scripts/fixup_securitycenter_v1beta1_keywords.py +++ /dev/null @@ -1,193 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_source': ('parent', 'source', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_organization_settings': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'field_mask', 'page_token', 'page_size', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1beta1/setup.py b/owl-bot-staging/v1beta1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1beta1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1beta1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1beta1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1beta1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1beta1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1beta1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1beta1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1beta1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1beta1/tests/__init__.py b/owl-bot-staging/v1beta1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/__init__.py b/owl-bot-staging/v1beta1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py b/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py deleted file mode 100644 index c6200162..00000000 --- a/owl-bot-staging/v1beta1/tests/unit/gapic/securitycenter_v1beta1/test_security_center.py +++ /dev/null @@ -1,10951 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1beta1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1beta1.services.security_center import transports -from google.cloud.securitycenter_v1beta1.types import finding -from google.cloud.securitycenter_v1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1beta1.types import organization_settings -from google.cloud.securitycenter_v1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1beta1.types import security_marks -from google.cloud.securitycenter_v1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1beta1.types import source -from google.cloud.securitycenter_v1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, finding.Finding) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, finding.Finding) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - finding.Finding(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - findings=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - findings=[ - finding.Finding(), - finding.Finding(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, finding.Finding) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'create_source', - 'create_finding', - 'get_iam_policy', - 'get_organization_settings', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_findings', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_iam_policy', - 'test_iam_permissions', - 'update_finding', - 'update_organization_settings', - 'update_source', - 'update_security_marks', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "scallop" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "abalone", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "oyster" - source = "nudibranch" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "cuttlefish", - "source": "mussel", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "winkle" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nautilus", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "scallop" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "abalone", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "squid" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "clam", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "whelk" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "octopus", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "oyster" - location = "nudibranch" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "cuttlefish", - "location": "mussel", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1p1beta1/.coveragerc b/owl-bot-staging/v1p1beta1/.coveragerc deleted file mode 100644 index 45cb273f..00000000 --- a/owl-bot-staging/v1p1beta1/.coveragerc +++ /dev/null @@ -1,13 +0,0 @@ -[run] -branch = True - -[report] -show_missing = True -omit = - google/cloud/securitycenter/__init__.py - google/cloud/securitycenter/gapic_version.py -exclude_lines = - # Re-enable the standard pragma - pragma: NO COVER - # Ignore debug-only repr - def __repr__ diff --git a/owl-bot-staging/v1p1beta1/.flake8 b/owl-bot-staging/v1p1beta1/.flake8 deleted file mode 100644 index 29227d4c..00000000 --- a/owl-bot-staging/v1p1beta1/.flake8 +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2020 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 -# -# https://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. - -# Generated by synthtool. DO NOT EDIT! -[flake8] -ignore = E203, E266, E501, W503 -exclude = - # Exclude generated code. - **/proto/** - **/gapic/** - **/services/** - **/types/** - *_pb2.py - - # Standard linting exemptions. - **/.nox/** - __pycache__, - .git, - *.pyc, - conf.py diff --git a/owl-bot-staging/v1p1beta1/MANIFEST.in b/owl-bot-staging/v1p1beta1/MANIFEST.in deleted file mode 100644 index 57b563bd..00000000 --- a/owl-bot-staging/v1p1beta1/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -recursive-include google/cloud/securitycenter *.py -recursive-include google/cloud/securitycenter_v1p1beta1 *.py diff --git a/owl-bot-staging/v1p1beta1/README.rst b/owl-bot-staging/v1p1beta1/README.rst deleted file mode 100644 index f8c63f4c..00000000 --- a/owl-bot-staging/v1p1beta1/README.rst +++ /dev/null @@ -1,49 +0,0 @@ -Python Client for Google Cloud Securitycenter API -================================================= - -Quick Start ------------ - -In order to use this library, you first need to go through the following steps: - -1. `Select or create a Cloud Platform project.`_ -2. `Enable billing for your project.`_ -3. Enable the Google Cloud Securitycenter API. -4. `Setup Authentication.`_ - -.. _Select or create a Cloud Platform project.: https://console.cloud.google.com/project -.. _Enable billing for your project.: https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project -.. _Setup Authentication.: https://googleapis.dev/python/google-api-core/latest/auth.html - -Installation -~~~~~~~~~~~~ - -Install this library in a `virtualenv`_ using pip. `virtualenv`_ is a tool to -create isolated Python environments. The basic problem it addresses is one of -dependencies and versions, and indirectly permissions. - -With `virtualenv`_, it's possible to install this library without needing system -install permissions, and without clashing with the installed system -dependencies. - -.. _`virtualenv`: https://virtualenv.pypa.io/en/latest/ - - -Mac/Linux -^^^^^^^^^ - -.. code-block:: console - - python3 -m venv - source /bin/activate - /bin/pip install /path/to/library - - -Windows -^^^^^^^ - -.. code-block:: console - - python3 -m venv - \Scripts\activate - \Scripts\pip.exe install \path\to\library diff --git a/owl-bot-staging/v1p1beta1/docs/conf.py b/owl-bot-staging/v1p1beta1/docs/conf.py deleted file mode 100644 index 488728ba..00000000 --- a/owl-bot-staging/v1p1beta1/docs/conf.py +++ /dev/null @@ -1,376 +0,0 @@ -# -*- 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. -# -# -# google-cloud-securitycenter documentation build configuration file -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os -import shlex - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath("..")) - -__version__ = "0.1.0" - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = "4.0.1" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.autosummary", - "sphinx.ext.intersphinx", - "sphinx.ext.coverage", - "sphinx.ext.napoleon", - "sphinx.ext.todo", - "sphinx.ext.viewcode", -] - -# autodoc/autosummary flags -autoclass_content = "both" -autodoc_default_flags = ["members"] -autosummary_generate = True - - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# Allow markdown includes (so releases.md can include CHANGLEOG.md) -# http://www.sphinx-doc.org/en/master/markdown.html -source_parsers = {".md": "recommonmark.parser.CommonMarkParser"} - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -source_suffix = [".rst", ".md"] - -# The encoding of source files. -# source_encoding = 'utf-8-sig' - -# The root toctree document. -root_doc = "index" - -# General information about the project. -project = u"google-cloud-securitycenter" -copyright = u"2022, Google, LLC" -author = u"Google APIs" # TODO: autogenerate this bit - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The full version, including alpha/beta/rc tags. -release = __version__ -# The short X.Y version. -version = ".".join(release.split(".")[0:2]) - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# today = '' -# Else, today_fmt is used as the format for a strftime call. -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ["_build"] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = "sphinx" - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = True - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "description": "Google Cloud Client Libraries for Python", - "github_user": "googleapis", - "github_repo": "google-cloud-python", - "github_banner": True, - "font_family": "'Roboto', Georgia, sans", - "head_font_family": "'Roboto', Georgia, serif", - "code_font_family": "'Roboto Mono', 'Consolas', monospace", -} - -# Add any paths that contain custom themes here, relative to this directory. -# html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = "google-cloud-securitycenter-doc" - -# -- Options for warnings ------------------------------------------------------ - - -suppress_warnings = [ - # Temporarily suppress this to avoid "more than one target found for - # cross-reference" warning, which are intractable for us to avoid while in - # a mono-repo. - # See https://github.com/sphinx-doc/sphinx/blob - # /2a65ffeef5c107c19084fabdd706cdff3f52d93c/sphinx/domains/python.py#L843 - "ref.python" -] - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # 'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - # 'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - # 'preamble': '', - # Latex figure (float) alignment - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ( - root_doc, - "google-cloud-securitycenter.tex", - u"google-cloud-securitycenter Documentation", - author, - "manual", - ) -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - root_doc, - "google-cloud-securitycenter", - u"Google Cloud Securitycenter Documentation", - [author], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - root_doc, - "google-cloud-securitycenter", - u"google-cloud-securitycenter Documentation", - author, - "google-cloud-securitycenter", - "GAPIC library for Google Cloud Securitycenter API", - "APIs", - ) -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = { - "python": ("http://python.readthedocs.org/en/latest/", None), - "gax": ("https://gax-python.readthedocs.org/en/latest/", None), - "google-auth": ("https://google-auth.readthedocs.io/en/stable", None), - "google-gax": ("https://gax-python.readthedocs.io/en/latest/", None), - "google.api_core": ("https://googleapis.dev/python/google-api-core/latest/", None), - "grpc": ("https://grpc.io/grpc/python/", None), - "requests": ("http://requests.kennethreitz.org/en/stable/", None), - "proto": ("https://proto-plus-python.readthedocs.io/en/stable", None), - "protobuf": ("https://googleapis.dev/python/protobuf/latest/", None), -} - - -# Napoleon settings -napoleon_google_docstring = True -napoleon_numpy_docstring = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = True -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True diff --git a/owl-bot-staging/v1p1beta1/docs/index.rst b/owl-bot-staging/v1p1beta1/docs/index.rst deleted file mode 100644 index 45263147..00000000 --- a/owl-bot-staging/v1p1beta1/docs/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -API Reference -------------- -.. toctree:: - :maxdepth: 2 - - securitycenter_v1p1beta1/services - securitycenter_v1p1beta1/types diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst deleted file mode 100644 index adab7f4a..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/security_center.rst +++ /dev/null @@ -1,10 +0,0 @@ -SecurityCenter --------------------------------- - -.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center - :members: - :inherited-members: - -.. automodule:: google.cloud.securitycenter_v1p1beta1.services.security_center.pagers - :members: - :inherited-members: diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst deleted file mode 100644 index 7f537e85..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/services.rst +++ /dev/null @@ -1,6 +0,0 @@ -Services for Google Cloud Securitycenter v1p1beta1 API -====================================================== -.. toctree:: - :maxdepth: 2 - - security_center diff --git a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst b/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst deleted file mode 100644 index a68ac5c6..00000000 --- a/owl-bot-staging/v1p1beta1/docs/securitycenter_v1p1beta1/types.rst +++ /dev/null @@ -1,6 +0,0 @@ -Types for Google Cloud Securitycenter v1p1beta1 API -=================================================== - -.. automodule:: google.cloud.securitycenter_v1p1beta1.types - :members: - :show-inheritance: diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py deleted file mode 100644 index af60b39b..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/__init__.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter import gapic_version as package_version - -__version__ = package_version.__version__ - - -from google.cloud.securitycenter_v1p1beta1.services.security_center.client import SecurityCenterClient -from google.cloud.securitycenter_v1p1beta1.services.security_center.async_client import SecurityCenterAsyncClient - -from google.cloud.securitycenter_v1p1beta1.types.asset import Asset -from google.cloud.securitycenter_v1p1beta1.types.finding import Finding -from google.cloud.securitycenter_v1p1beta1.types.folder import Folder -from google.cloud.securitycenter_v1p1beta1.types.notification_config import NotificationConfig -from google.cloud.securitycenter_v1p1beta1.types.notification_message import NotificationMessage -from google.cloud.securitycenter_v1p1beta1.types.organization_settings import OrganizationSettings -from google.cloud.securitycenter_v1p1beta1.types.resource import Resource -from google.cloud.securitycenter_v1p1beta1.types.run_asset_discovery_response import RunAssetDiscoveryResponse -from google.cloud.securitycenter_v1p1beta1.types.security_marks import SecurityMarks -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateFindingRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import CreateSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import DeleteNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetOrganizationSettingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GetSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupAssetsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupFindingsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import GroupResult -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListAssetsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListFindingsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListNotificationConfigsResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import ListSourcesResponse -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import RunAssetDiscoveryRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import SetFindingStateRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateFindingRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateNotificationConfigRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateOrganizationSettingsRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSecurityMarksRequest -from google.cloud.securitycenter_v1p1beta1.types.securitycenter_service import UpdateSourceRequest -from google.cloud.securitycenter_v1p1beta1.types.source import Source - -__all__ = ('SecurityCenterClient', - 'SecurityCenterAsyncClient', - 'Asset', - 'Finding', - 'Folder', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'Resource', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py deleted file mode 100644 index 55bd462e..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/__init__.py +++ /dev/null @@ -1,102 +0,0 @@ -# -*- 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. -# -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -__version__ = package_version.__version__ - - -from .services.security_center import SecurityCenterClient -from .services.security_center import SecurityCenterAsyncClient - -from .types.asset import Asset -from .types.finding import Finding -from .types.folder import Folder -from .types.notification_config import NotificationConfig -from .types.notification_message import NotificationMessage -from .types.organization_settings import OrganizationSettings -from .types.resource import Resource -from .types.run_asset_discovery_response import RunAssetDiscoveryResponse -from .types.security_marks import SecurityMarks -from .types.securitycenter_service import CreateFindingRequest -from .types.securitycenter_service import CreateNotificationConfigRequest -from .types.securitycenter_service import CreateSourceRequest -from .types.securitycenter_service import DeleteNotificationConfigRequest -from .types.securitycenter_service import GetNotificationConfigRequest -from .types.securitycenter_service import GetOrganizationSettingsRequest -from .types.securitycenter_service import GetSourceRequest -from .types.securitycenter_service import GroupAssetsRequest -from .types.securitycenter_service import GroupAssetsResponse -from .types.securitycenter_service import GroupFindingsRequest -from .types.securitycenter_service import GroupFindingsResponse -from .types.securitycenter_service import GroupResult -from .types.securitycenter_service import ListAssetsRequest -from .types.securitycenter_service import ListAssetsResponse -from .types.securitycenter_service import ListFindingsRequest -from .types.securitycenter_service import ListFindingsResponse -from .types.securitycenter_service import ListNotificationConfigsRequest -from .types.securitycenter_service import ListNotificationConfigsResponse -from .types.securitycenter_service import ListSourcesRequest -from .types.securitycenter_service import ListSourcesResponse -from .types.securitycenter_service import RunAssetDiscoveryRequest -from .types.securitycenter_service import SetFindingStateRequest -from .types.securitycenter_service import UpdateFindingRequest -from .types.securitycenter_service import UpdateNotificationConfigRequest -from .types.securitycenter_service import UpdateOrganizationSettingsRequest -from .types.securitycenter_service import UpdateSecurityMarksRequest -from .types.securitycenter_service import UpdateSourceRequest -from .types.source import Source - -__all__ = ( - 'SecurityCenterAsyncClient', -'Asset', -'CreateFindingRequest', -'CreateNotificationConfigRequest', -'CreateSourceRequest', -'DeleteNotificationConfigRequest', -'Finding', -'Folder', -'GetNotificationConfigRequest', -'GetOrganizationSettingsRequest', -'GetSourceRequest', -'GroupAssetsRequest', -'GroupAssetsResponse', -'GroupFindingsRequest', -'GroupFindingsResponse', -'GroupResult', -'ListAssetsRequest', -'ListAssetsResponse', -'ListFindingsRequest', -'ListFindingsResponse', -'ListNotificationConfigsRequest', -'ListNotificationConfigsResponse', -'ListSourcesRequest', -'ListSourcesResponse', -'NotificationConfig', -'NotificationMessage', -'OrganizationSettings', -'Resource', -'RunAssetDiscoveryRequest', -'RunAssetDiscoveryResponse', -'SecurityCenterClient', -'SecurityMarks', -'SetFindingStateRequest', -'Source', -'UpdateFindingRequest', -'UpdateNotificationConfigRequest', -'UpdateOrganizationSettingsRequest', -'UpdateSecurityMarksRequest', -'UpdateSourceRequest', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json deleted file mode 100644 index 892a85e5..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_metadata.json +++ /dev/null @@ -1,373 +0,0 @@ - { - "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", - "language": "python", - "libraryPackage": "google.cloud.securitycenter_v1p1beta1", - "protoPackage": "google.cloud.securitycenter.v1p1beta1", - "schema": "1.0", - "services": { - "SecurityCenter": { - "clients": { - "grpc": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "grpc-async": { - "libraryClient": "SecurityCenterAsyncClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - }, - "rest": { - "libraryClient": "SecurityCenterClient", - "rpcs": { - "CreateFinding": { - "methods": [ - "create_finding" - ] - }, - "CreateNotificationConfig": { - "methods": [ - "create_notification_config" - ] - }, - "CreateSource": { - "methods": [ - "create_source" - ] - }, - "DeleteNotificationConfig": { - "methods": [ - "delete_notification_config" - ] - }, - "GetIamPolicy": { - "methods": [ - "get_iam_policy" - ] - }, - "GetNotificationConfig": { - "methods": [ - "get_notification_config" - ] - }, - "GetOrganizationSettings": { - "methods": [ - "get_organization_settings" - ] - }, - "GetSource": { - "methods": [ - "get_source" - ] - }, - "GroupAssets": { - "methods": [ - "group_assets" - ] - }, - "GroupFindings": { - "methods": [ - "group_findings" - ] - }, - "ListAssets": { - "methods": [ - "list_assets" - ] - }, - "ListFindings": { - "methods": [ - "list_findings" - ] - }, - "ListNotificationConfigs": { - "methods": [ - "list_notification_configs" - ] - }, - "ListSources": { - "methods": [ - "list_sources" - ] - }, - "RunAssetDiscovery": { - "methods": [ - "run_asset_discovery" - ] - }, - "SetFindingState": { - "methods": [ - "set_finding_state" - ] - }, - "SetIamPolicy": { - "methods": [ - "set_iam_policy" - ] - }, - "TestIamPermissions": { - "methods": [ - "test_iam_permissions" - ] - }, - "UpdateFinding": { - "methods": [ - "update_finding" - ] - }, - "UpdateNotificationConfig": { - "methods": [ - "update_notification_config" - ] - }, - "UpdateOrganizationSettings": { - "methods": [ - "update_organization_settings" - ] - }, - "UpdateSecurityMarks": { - "methods": [ - "update_security_marks" - ] - }, - "UpdateSource": { - "methods": [ - "update_source" - ] - } - } - } - } - } - } -} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py deleted file mode 100644 index 405b1ceb..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/gapic_version.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- 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. -# -__version__ = "0.1.0" # {x-release-please-version} diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed deleted file mode 100644 index 23a44fc7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/py.typed +++ /dev/null @@ -1,2 +0,0 @@ -# Marker file for PEP 561. -# The google-cloud-securitycenter package uses inline types. diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py deleted file mode 100644 index e8e1c384..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py deleted file mode 100644 index 4712915a..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- 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. -# -from .client import SecurityCenterClient -from .async_client import SecurityCenterAsyncClient - -__all__ = ( - 'SecurityCenterClient', - 'SecurityCenterAsyncClient', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py deleted file mode 100644 index 7347ebbc..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/async_client.py +++ /dev/null @@ -1,3083 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import functools -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -from google.api_core.client_options import ClientOptions -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .client import SecurityCenterClient - - -class SecurityCenterAsyncClient: - """V1p1Beta1 APIs for Security Center service.""" - - _client: SecurityCenterClient - - DEFAULT_ENDPOINT = SecurityCenterClient.DEFAULT_ENDPOINT - DEFAULT_MTLS_ENDPOINT = SecurityCenterClient.DEFAULT_MTLS_ENDPOINT - - asset_path = staticmethod(SecurityCenterClient.asset_path) - parse_asset_path = staticmethod(SecurityCenterClient.parse_asset_path) - finding_path = staticmethod(SecurityCenterClient.finding_path) - parse_finding_path = staticmethod(SecurityCenterClient.parse_finding_path) - notification_config_path = staticmethod(SecurityCenterClient.notification_config_path) - parse_notification_config_path = staticmethod(SecurityCenterClient.parse_notification_config_path) - organization_settings_path = staticmethod(SecurityCenterClient.organization_settings_path) - parse_organization_settings_path = staticmethod(SecurityCenterClient.parse_organization_settings_path) - security_marks_path = staticmethod(SecurityCenterClient.security_marks_path) - parse_security_marks_path = staticmethod(SecurityCenterClient.parse_security_marks_path) - source_path = staticmethod(SecurityCenterClient.source_path) - parse_source_path = staticmethod(SecurityCenterClient.parse_source_path) - topic_path = staticmethod(SecurityCenterClient.topic_path) - parse_topic_path = staticmethod(SecurityCenterClient.parse_topic_path) - common_billing_account_path = staticmethod(SecurityCenterClient.common_billing_account_path) - parse_common_billing_account_path = staticmethod(SecurityCenterClient.parse_common_billing_account_path) - common_folder_path = staticmethod(SecurityCenterClient.common_folder_path) - parse_common_folder_path = staticmethod(SecurityCenterClient.parse_common_folder_path) - common_organization_path = staticmethod(SecurityCenterClient.common_organization_path) - parse_common_organization_path = staticmethod(SecurityCenterClient.parse_common_organization_path) - common_project_path = staticmethod(SecurityCenterClient.common_project_path) - parse_common_project_path = staticmethod(SecurityCenterClient.parse_common_project_path) - common_location_path = staticmethod(SecurityCenterClient.common_location_path) - parse_common_location_path = staticmethod(SecurityCenterClient.parse_common_location_path) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_info.__func__(SecurityCenterAsyncClient, info, *args, **kwargs) # type: ignore - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterAsyncClient: The constructed client. - """ - return SecurityCenterClient.from_service_account_file.__func__(SecurityCenterAsyncClient, filename, *args, **kwargs) # type: ignore - - from_service_account_json = from_service_account_file - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - return SecurityCenterClient.get_mtls_endpoint_and_cert_source(client_options) # type: ignore - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client instance. - """ - return self._client.transport - - get_transport_class = functools.partial(type(SecurityCenterClient).get_transport_class, type(SecurityCenterClient)) - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Union[str, SecurityCenterTransport] = "grpc_asyncio", - client_options: Optional[ClientOptions] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, ~.SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (ClientOptions): Custom options for the client. It - won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - """ - self._client = SecurityCenterClient( - credentials=credentials, - transport=transport, - client_options=client_options, - client_info=client_info, - - ) - - async def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]]): - The request object. Request message for creating a - source. - parent (:class:`str`): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]]): - The request object. Request message for creating a - finding. - parent (:class:`str`): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]]): - The request object. Request message for creating a - notification config. - parent (:class:`str`): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (:class:`str`): - Required. Unique identifier provided - by the client within the parent scope. - It must be between 1 and 128 characters, - and contains alphanumeric characters, - underscores or hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.CreateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.create_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]]): - The request object. Request message for deleting a - notification config. - name (:class:`str`): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.DeleteNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.delete_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - async def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]]): - The request object. Request message for ``GetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.GetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]]): - The request object. Request message for getting a - notification config. - name (:class:`str`): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]]): - The request object. Request message for getting - organization settings. - name (:class:`str`): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]]): - The request object. Request message for getting a source. - name (:class:`str`): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GetSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsAsyncPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsAsyncPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]]): - The request object. Request message for grouping by - findings. - parent (:class:`str`): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (:class:`str`): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.GroupFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.GroupFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsAsyncPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]]): - The request object. Request message for listing assets. - parent (:class:`str`): - Required. Name of the organization assets should belong - to. Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListAssetsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListAssetsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsAsyncPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]]): - The request object. Request message for listing findings. - parent (:class:`str`): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListFindingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListFindingsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsAsyncPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]]): - The request object. Request message for listing - notification configs. - parent (:class:`str`): - Required. Name of the organization to list notification - configs. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListNotificationConfigsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListNotificationConfigsAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesAsyncPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]]): - The request object. Request message for listing sources. - parent (:class:`str`): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id], folders/[folder_id], - or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.ListSourcesRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__aiter__` convenience method. - response = pagers.ListSourcesAsyncPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation_async.AsyncOperation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]]): - The request object. Request message for running asset - discovery for an organization. - parent (:class:`str`): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation_async.AsyncOperation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.RunAssetDiscoveryRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.run_asset_discovery, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation_async.from_gapic( - response, - self._client._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - async def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]]): - The request object. Request message for updating a - finding's state. - name (:class:`str`): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding.State`): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (:class:`google.protobuf.timestamp_pb2.Timestamp`): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.SetFindingStateRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_finding_state, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]]): - The request object. Request message for ``SetIamPolicy`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - request = iam_policy_pb2.SetIamPolicyRequest(resource=resource, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.set_iam_policy, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]]): - The request object. Request message for ``TestIamPermissions`` method. - resource (:class:`str`): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (:class:`MutableSequence[str]`): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - if isinstance(request, dict): - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - request = iam_policy_pb2.TestIamPermissionsRequest(resource=resource, permissions=permissions, ) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]]): - The request object. Request message for updating or - creating a finding. - finding (:class:`google.cloud.securitycenter_v1p1beta1.types.Finding`): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a - finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing - source_properties. Individual source_properties can be - added/updated by using "source_properties." in the field - mask. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateFindingRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_finding, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]]): - The request object. Request message for updating a - notification config. - notification_config (:class:`google.cloud.securitycenter_v1p1beta1.types.NotificationConfig`): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateNotificationConfigRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_notification_config, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]]): - The request object. Request message for updating an - organization's settings. - organization_settings (:class:`google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings`): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_organization_settings, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]]): - The request object. Request message for updating a - source. - source (:class:`google.cloud.securitycenter_v1p1beta1.types.Source`): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating - the source resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSourceRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_source, - default_timeout=60.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Optional[Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (:class:`google.cloud.securitycenter_v1p1beta1.types.SecurityMarks`): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (:class:`google.protobuf.field_mask_pb2.FieldMask`): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If - empty or set to "marks", all marks will be replaced. - Individual marks can be updated using - "marks.". - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks, update_mask]) - if request is not None and has_flattened_params: - raise ValueError("If the `request` argument is set, then none of " - "the individual field arguments should be set.") - - request = securitycenter_service.UpdateSecurityMarksRequest(request) - - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = gapic_v1.method_async.wrap_method( - self._client._transport.update_security_marks, - default_timeout=480.0, - client_info=DEFAULT_CLIENT_INFO, - ) - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = await rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc, tb): - await self.transport.close() - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterAsyncClient", -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py deleted file mode 100644 index 887e5f66..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/client.py +++ /dev/null @@ -1,3264 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -import os -import re -from typing import Dict, Mapping, MutableMapping, MutableSequence, Optional, Sequence, Tuple, Type, Union, cast - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -from google.api_core import client_options as client_options_lib -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport import mtls # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth.exceptions import MutualTLSChannelError # type: ignore -from google.oauth2 import service_account # type: ignore - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - -from google.api_core import operation # type: ignore -from google.api_core import operation_async # type: ignore -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from .transports.base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .transports.grpc import SecurityCenterGrpcTransport -from .transports.grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .transports.rest import SecurityCenterRestTransport - - -class SecurityCenterClientMeta(type): - """Metaclass for the SecurityCenter client. - - This provides class-level methods for building and retrieving - support objects (e.g. transport) without polluting the client instance - objects. - """ - _transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] - _transport_registry["grpc"] = SecurityCenterGrpcTransport - _transport_registry["grpc_asyncio"] = SecurityCenterGrpcAsyncIOTransport - _transport_registry["rest"] = SecurityCenterRestTransport - - def get_transport_class(cls, - label: Optional[str] = None, - ) -> Type[SecurityCenterTransport]: - """Returns an appropriate transport class. - - Args: - label: The name of the desired transport. If none is - provided, then the first transport in the registry is used. - - Returns: - The transport class to use. - """ - # If a specific transport is requested, return that one. - if label: - return cls._transport_registry[label] - - # No transport is requested; return the default (that is, the first one - # in the dictionary). - return next(iter(cls._transport_registry.values())) - - -class SecurityCenterClient(metaclass=SecurityCenterClientMeta): - """V1p1Beta1 APIs for Security Center service.""" - - @staticmethod - def _get_default_mtls_endpoint(api_endpoint): - """Converts api endpoint to mTLS endpoint. - - Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to - "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. - Args: - api_endpoint (Optional[str]): the api endpoint to convert. - Returns: - str: converted mTLS api endpoint. - """ - if not api_endpoint: - return api_endpoint - - mtls_endpoint_re = re.compile( - r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" - ) - - m = mtls_endpoint_re.match(api_endpoint) - name, mtls, sandbox, googledomain = m.groups() - if mtls or not googledomain: - return api_endpoint - - if sandbox: - return api_endpoint.replace( - "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" - ) - - return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") - - DEFAULT_ENDPOINT = "securitycenter.googleapis.com" - DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore - DEFAULT_ENDPOINT - ) - - @classmethod - def from_service_account_info(cls, info: dict, *args, **kwargs): - """Creates an instance of this client using the provided credentials - info. - - Args: - info (dict): The service account private key info. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_info(info) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - @classmethod - def from_service_account_file(cls, filename: str, *args, **kwargs): - """Creates an instance of this client using the provided credentials - file. - - Args: - filename (str): The path to the service account private key json - file. - args: Additional arguments to pass to the constructor. - kwargs: Additional arguments to pass to the constructor. - - Returns: - SecurityCenterClient: The constructed client. - """ - credentials = service_account.Credentials.from_service_account_file( - filename) - kwargs["credentials"] = credentials - return cls(*args, **kwargs) - - from_service_account_json = from_service_account_file - - @property - def transport(self) -> SecurityCenterTransport: - """Returns the transport used by the client instance. - - Returns: - SecurityCenterTransport: The transport used by the client - instance. - """ - return self._transport - - @staticmethod - def asset_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified asset string.""" - return "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_asset_path(path: str) -> Dict[str,str]: - """Parses a asset path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def finding_path(organization: str,source: str,finding: str,) -> str: - """Returns a fully-qualified finding string.""" - return "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - - @staticmethod - def parse_finding_path(path: str) -> Dict[str,str]: - """Parses a finding path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)/findings/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def notification_config_path(organization: str,notification_config: str,) -> str: - """Returns a fully-qualified notification_config string.""" - return "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - - @staticmethod - def parse_notification_config_path(path: str) -> Dict[str,str]: - """Parses a notification_config path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/notificationConfigs/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def organization_settings_path(organization: str,) -> str: - """Returns a fully-qualified organization_settings string.""" - return "organizations/{organization}/organizationSettings".format(organization=organization, ) - - @staticmethod - def parse_organization_settings_path(path: str) -> Dict[str,str]: - """Parses a organization_settings path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/organizationSettings$", path) - return m.groupdict() if m else {} - - @staticmethod - def security_marks_path(organization: str,asset: str,) -> str: - """Returns a fully-qualified security_marks string.""" - return "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - - @staticmethod - def parse_security_marks_path(path: str) -> Dict[str,str]: - """Parses a security_marks path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/assets/(?P.+?)/securityMarks$", path) - return m.groupdict() if m else {} - - @staticmethod - def source_path(organization: str,source: str,) -> str: - """Returns a fully-qualified source string.""" - return "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - - @staticmethod - def parse_source_path(path: str) -> Dict[str,str]: - """Parses a source path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)/sources/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def topic_path(project: str,topic: str,) -> str: - """Returns a fully-qualified topic string.""" - return "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - - @staticmethod - def parse_topic_path(path: str) -> Dict[str,str]: - """Parses a topic path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/topics/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_billing_account_path(billing_account: str, ) -> str: - """Returns a fully-qualified billing_account string.""" - return "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - - @staticmethod - def parse_common_billing_account_path(path: str) -> Dict[str,str]: - """Parse a billing_account path into its component segments.""" - m = re.match(r"^billingAccounts/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_folder_path(folder: str, ) -> str: - """Returns a fully-qualified folder string.""" - return "folders/{folder}".format(folder=folder, ) - - @staticmethod - def parse_common_folder_path(path: str) -> Dict[str,str]: - """Parse a folder path into its component segments.""" - m = re.match(r"^folders/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_organization_path(organization: str, ) -> str: - """Returns a fully-qualified organization string.""" - return "organizations/{organization}".format(organization=organization, ) - - @staticmethod - def parse_common_organization_path(path: str) -> Dict[str,str]: - """Parse a organization path into its component segments.""" - m = re.match(r"^organizations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_project_path(project: str, ) -> str: - """Returns a fully-qualified project string.""" - return "projects/{project}".format(project=project, ) - - @staticmethod - def parse_common_project_path(path: str) -> Dict[str,str]: - """Parse a project path into its component segments.""" - m = re.match(r"^projects/(?P.+?)$", path) - return m.groupdict() if m else {} - - @staticmethod - def common_location_path(project: str, location: str, ) -> str: - """Returns a fully-qualified location string.""" - return "projects/{project}/locations/{location}".format(project=project, location=location, ) - - @staticmethod - def parse_common_location_path(path: str) -> Dict[str,str]: - """Parse a location path into its component segments.""" - m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) - return m.groupdict() if m else {} - - @classmethod - def get_mtls_endpoint_and_cert_source(cls, client_options: Optional[client_options_lib.ClientOptions] = None): - """Return the API endpoint and client cert source for mutual TLS. - - The client cert source is determined in the following order: - (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the - client cert source is None. - (2) if `client_options.client_cert_source` is provided, use the provided one; if the - default client cert source exists, use the default one; otherwise the client cert - source is None. - - The API endpoint is determined in the following order: - (1) if `client_options.api_endpoint` if provided, use the provided one. - (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the - default mTLS endpoint; if the environment variable is "never", use the default API - endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise - use the default API endpoint. - - More details can be found at https://google.aip.dev/auth/4114. - - Args: - client_options (google.api_core.client_options.ClientOptions): Custom options for the - client. Only the `api_endpoint` and `client_cert_source` properties may be used - in this method. - - Returns: - Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the - client cert source to use. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If any errors happen. - """ - if client_options is None: - client_options = client_options_lib.ClientOptions() - use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") - use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") - if use_client_cert not in ("true", "false"): - raise ValueError("Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`") - if use_mtls_endpoint not in ("auto", "never", "always"): - raise MutualTLSChannelError("Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`") - - # Figure out the client cert source to use. - client_cert_source = None - if use_client_cert == "true": - if client_options.client_cert_source: - client_cert_source = client_options.client_cert_source - elif mtls.has_default_client_cert_source(): - client_cert_source = mtls.default_client_cert_source() - - # Figure out which api endpoint to use. - if client_options.api_endpoint is not None: - api_endpoint = client_options.api_endpoint - elif use_mtls_endpoint == "always" or (use_mtls_endpoint == "auto" and client_cert_source): - api_endpoint = cls.DEFAULT_MTLS_ENDPOINT - else: - api_endpoint = cls.DEFAULT_ENDPOINT - - return api_endpoint, client_cert_source - - def __init__(self, *, - credentials: Optional[ga_credentials.Credentials] = None, - transport: Optional[Union[str, SecurityCenterTransport]] = None, - client_options: Optional[Union[client_options_lib.ClientOptions, dict]] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - ) -> None: - """Instantiates the security center client. - - Args: - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - transport (Union[str, SecurityCenterTransport]): The - transport to use. If set to None, a transport is chosen - automatically. - client_options (Optional[Union[google.api_core.client_options.ClientOptions, dict]]): Custom options for the - client. It won't take effect if a ``transport`` instance is provided. - (1) The ``api_endpoint`` property can be used to override the - default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT - environment variable can also be used to override the endpoint: - "always" (always use the default mTLS endpoint), "never" (always - use the default regular endpoint) and "auto" (auto switch to the - default mTLS endpoint if client certificate is present, this is - the default value). However, the ``api_endpoint`` property takes - precedence if provided. - (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable - is "true", then the ``client_cert_source`` property can be used - to provide client certificate for mutual TLS transport. If - not provided, the default SSL client certificate will be used if - present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not - set, no client certificate will be used. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - """ - if isinstance(client_options, dict): - client_options = client_options_lib.from_dict(client_options) - if client_options is None: - client_options = client_options_lib.ClientOptions() - client_options = cast(client_options_lib.ClientOptions, client_options) - - api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source(client_options) - - api_key_value = getattr(client_options, "api_key", None) - if api_key_value and credentials: - raise ValueError("client_options.api_key and credentials are mutually exclusive") - - # Save or instantiate the transport. - # Ordinarily, we provide the transport, but allowing a custom transport - # instance provides an extensibility point for unusual situations. - if isinstance(transport, SecurityCenterTransport): - # transport is a SecurityCenterTransport instance. - if credentials or client_options.credentials_file or api_key_value: - raise ValueError("When providing a transport instance, " - "provide its credentials directly.") - if client_options.scopes: - raise ValueError( - "When providing a transport instance, provide its scopes " - "directly." - ) - self._transport = transport - else: - import google.auth._default # type: ignore - - if api_key_value and hasattr(google.auth._default, "get_api_key_credentials"): - credentials = google.auth._default.get_api_key_credentials(api_key_value) - - Transport = type(self).get_transport_class(transport) - self._transport = Transport( - credentials=credentials, - credentials_file=client_options.credentials_file, - host=api_endpoint, - scopes=client_options.scopes, - client_cert_source_for_mtls=client_cert_source_func, - quota_project_id=client_options.quota_project_id, - client_info=client_info, - always_use_jwt_access=True, - api_audience=client_options.api_audience, - ) - - def create_source(self, - request: Optional[Union[securitycenter_service.CreateSourceRequest, dict]] = None, - *, - parent: Optional[str] = None, - source: Optional[gcs_source.Source] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Creates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest, dict]): - The request object. Request message for creating a - source. - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The Source being created, only the - display_name and description will be used. All other - fields will be ignored. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, source]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateSourceRequest): - request = securitycenter_service.CreateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if source is not None: - request.source = source - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_finding(self, - request: Optional[Union[securitycenter_service.CreateFindingRequest, dict]] = None, - *, - parent: Optional[str] = None, - finding_id: Optional[str] = None, - finding: Optional[gcs_finding.Finding] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates a finding. The corresponding source must - exist for finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest, dict]): - The request object. Request message for creating a - finding. - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding_id (str): - Required. Unique identifier provided - by the client within the parent scope. - - This corresponds to the ``finding_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output - only fields on this resource. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, finding_id, finding]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateFindingRequest): - request = securitycenter_service.CreateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if finding_id is not None: - request.finding_id = finding_id - if finding is not None: - request.finding = finding - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def create_notification_config(self, - request: Optional[Union[securitycenter_service.CreateNotificationConfigRequest, dict]] = None, - *, - parent: Optional[str] = None, - config_id: Optional[str] = None, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Creates a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest, dict]): - The request object. Request message for creating a - notification config. - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - config_id (str): - Required. Unique identifier provided - by the client within the parent scope. - It must be between 1 and 128 characters, - and contains alphanumeric characters, - underscores or hyphens only. - - This corresponds to the ``config_id`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config - being created. The name and the service - account will be ignored as they are both - output only fields on this resource. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, config_id, notification_config]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.CreateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.CreateNotificationConfigRequest): - request = securitycenter_service.CreateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if config_id is not None: - request.config_id = config_id - if notification_config is not None: - request.notification_config = notification_config - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.create_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def delete_notification_config(self, - request: Optional[Union[securitycenter_service.DeleteNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> None: - r"""Deletes a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest, dict]): - The request object. Request message for deleting a - notification config. - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.DeleteNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.DeleteNotificationConfigRequest): - request = securitycenter_service.DeleteNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.delete_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - def get_iam_policy(self, - request: Optional[Union[iam_policy_pb2.GetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Gets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.GetIamPolicyRequest, dict]): - The request object. Request message for ``GetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being requested. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.GetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.GetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_notification_config(self, - request: Optional[Union[securitycenter_service.GetNotificationConfigRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> notification_config.NotificationConfig: - r"""Gets a notification config. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest, dict]): - The request object. Request message for getting a - notification config. - name (str): - Required. Name of the notification config to get. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetNotificationConfigRequest): - request = securitycenter_service.GetNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_organization_settings(self, - request: Optional[Union[securitycenter_service.GetOrganizationSettingsRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> organization_settings.OrganizationSettings: - r"""Gets the settings for an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest, dict]): - The request object. Request message for getting - organization settings. - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetOrganizationSettingsRequest): - request = securitycenter_service.GetOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def get_source(self, - request: Optional[Union[securitycenter_service.GetSourceRequest, dict]] = None, - *, - name: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> source.Source: - r"""Gets a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest, dict]): - The request object. Request message for getting a source. - name (str): - Required. Relative resource name of the source. Its - format is - "organizations/[organization_id]/source/[source_id]". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GetSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GetSourceRequest): - request = securitycenter_service.GetSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.get_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_assets(self, - request: Optional[Union[securitycenter_service.GroupAssetsRequest, dict]] = None, - *, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupAssetsPager: - r"""Filters an organization's assets and groups them by - their specified properties. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest, dict]): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager: - Response message for grouping by - assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupAssetsRequest): - request = securitycenter_service.GroupAssetsRequest(request) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def group_findings(self, - request: Optional[Union[securitycenter_service.GroupFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - group_by: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.GroupFindingsPager: - r"""Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest, dict]): - The request object. Request message for grouping by - findings. - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - group_by (str): - Required. Expression that defines what assets fields to - use for grouping (including ``state_change``). The - string value should follow SQL syntax: comma separated - list of fields. For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration - is set: - - - state_change - - This corresponds to the ``group_by`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager: - Response message for group by - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent, group_by]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.GroupFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.GroupFindingsRequest): - request = securitycenter_service.GroupFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - if group_by is not None: - request.group_by = group_by - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.group_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.GroupFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_assets(self, - request: Optional[Union[securitycenter_service.ListAssetsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListAssetsPager: - r"""Lists an organization's assets. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest, dict]): - The request object. Request message for listing assets. - parent (str): - Required. Name of the organization assets should belong - to. Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager: - Response message for listing assets. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListAssetsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListAssetsRequest): - request = securitycenter_service.ListAssetsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_assets] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListAssetsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_findings(self, - request: Optional[Union[securitycenter_service.ListFindingsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListFindingsPager: - r"""Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest, dict]): - The request object. Request message for listing findings. - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list - across all sources provide a source_id of ``-``. For - example: organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager: - Response message for listing - findings. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListFindingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListFindingsRequest): - request = securitycenter_service.ListFindingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_findings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListFindingsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_notification_configs(self, - request: Optional[Union[securitycenter_service.ListNotificationConfigsRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListNotificationConfigsPager: - r"""Lists notification configs. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest, dict]): - The request object. Request message for listing - notification configs. - parent (str): - Required. Name of the organization to list notification - configs. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager: - Response message for listing - notification configs. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListNotificationConfigsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListNotificationConfigsRequest): - request = securitycenter_service.ListNotificationConfigsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_notification_configs] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListNotificationConfigsPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def list_sources(self, - request: Optional[Union[securitycenter_service.ListSourcesRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> pagers.ListSourcesPager: - r"""Lists all sources belonging to an organization. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest, dict]): - The request object. Request message for listing sources. - parent (str): - Required. Resource name of the parent of sources to - list. Its format should be - "organizations/[organization_id], folders/[folder_id], - or projects/[project_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager: - Response message for listing sources. - Iterating over this object will yield - results and resolve additional pages - automatically. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.ListSourcesRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.ListSourcesRequest): - request = securitycenter_service.ListSourcesRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.list_sources] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # This method is paged; wrap the response in a pager, which provides - # an `__iter__` convenience method. - response = pagers.ListSourcesPager( - method=rpc, - request=request, - response=response, - metadata=metadata, - ) - - # Done; return the response. - return response - - def run_asset_discovery(self, - request: Optional[Union[securitycenter_service.RunAssetDiscoveryRequest, dict]] = None, - *, - parent: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> operation.Operation: - r"""Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest, dict]): - The request object. Request message for running asset - discovery for an organization. - parent (str): - Required. Name of the organization to run asset - discovery for. Its format is - "organizations/[organization_id]". - - This corresponds to the ``parent`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.api_core.operation.Operation: - An object representing a long-running operation. - - The result type for the operation will be - :class:`google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse` - Response of asset discovery run - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([parent]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.RunAssetDiscoveryRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.RunAssetDiscoveryRequest): - request = securitycenter_service.RunAssetDiscoveryRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if parent is not None: - request.parent = parent - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.run_asset_discovery] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("parent", request.parent), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Wrap the response in an operation future. - response = operation.from_gapic( - response, - self._transport.operations_client, - run_asset_discovery_response.RunAssetDiscoveryResponse, - metadata_type=empty_pb2.Empty, - ) - - # Done; return the response. - return response - - def set_finding_state(self, - request: Optional[Union[securitycenter_service.SetFindingStateRequest, dict]] = None, - *, - name: Optional[str] = None, - state: Optional[finding.Finding.State] = None, - start_time: Optional[timestamp_pb2.Timestamp] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> finding.Finding: - r"""Updates the state of a finding. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest, dict]): - The request object. Request message for updating a - finding's state. - name (str): - Required. The relative resource name of the finding. - See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - - This corresponds to the ``name`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - Required. The desired State of the - finding. - - This corresponds to the ``state`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the - updated state takes effect. - - This corresponds to the ``start_time`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([name, state, start_time]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.SetFindingStateRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.SetFindingStateRequest): - request = securitycenter_service.SetFindingStateRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if name is not None: - request.name = name - if state is not None: - request.state = state - if start_time is not None: - request.start_time = start_time - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_finding_state] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("name", request.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def set_iam_policy(self, - request: Optional[Union[iam_policy_pb2.SetIamPolicyRequest, dict]] = None, - *, - resource: Optional[str] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> policy_pb2.Policy: - r"""Sets the access control policy on the specified - Source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.SetIamPolicyRequest, dict]): - The request object. Request message for ``SetIamPolicy`` method. - resource (str): - REQUIRED: The resource for which the - policy is being specified. See the - operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which specifies access - controls for Google Cloud resources. - - A Policy is a collection of bindings. A binding binds - one or more members, or principals, to a single role. - Principals can be user accounts, service accounts, - Google groups, and domains (such as G Suite). A role - is a named list of permissions; each role can be an - IAM predefined role or a user-created custom role. - - For some types of Google Cloud resources, a binding - can also specify a condition, which is a logical - expression that allows access to a resource only if - the expression evaluates to true. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the [IAM - documentation](\ https://cloud.google.com/iam/help/conditions/resource-policies). - - **JSON example:** - - { - "bindings": [ - { - "role": - "roles/resourcemanager.organizationAdmin", - "members": [ "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - - }, { "role": - "roles/resourcemanager.organizationViewer", - "members": [ "user:eve@example.com" ], - "condition": { "title": "expirable access", - "description": "Does not grant access after - Sep 2020", "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", } } - - ], "etag": "BwWWja0YfJA=", "version": 3 - - } - - **YAML example:** - - bindings: - members: - user:\ mike@example.com - - group:\ admins@example.com - domain:google.com - - serviceAccount:\ my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - user:\ eve@example.com role: - roles/resourcemanager.organizationViewer - condition: title: expirable access description: - Does not grant access after Sep 2020 expression: - request.time < - timestamp('2020-10-01T00:00:00.000Z') etag: - BwWWja0YfJA= version: 3 - - For a description of IAM and its features, see the - [IAM - documentation](\ https://cloud.google.com/iam/docs/). - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.SetIamPolicyRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.SetIamPolicyRequest() - if resource is not None: - request.resource = resource - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.set_iam_policy] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def test_iam_permissions(self, - request: Optional[Union[iam_policy_pb2.TestIamPermissionsRequest, dict]] = None, - *, - resource: Optional[str] = None, - permissions: Optional[MutableSequence[str]] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Returns the permissions that a caller has on the - specified source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - from google.iam.v1 import iam_policy_pb2 # type: ignore - - def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest, dict]): - The request object. Request message for ``TestIamPermissions`` method. - resource (str): - REQUIRED: The resource for which the - policy detail is being requested. See - the operation documentation for the - appropriate value for this field. - - This corresponds to the ``resource`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - permissions (MutableSequence[str]): - The set of permissions to check for the ``resource``. - Permissions with wildcards (such as '*' or 'storage.*') - are not allowed. For more information see `IAM - Overview `__. - - This corresponds to the ``permissions`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse: - Response message for TestIamPermissions method. - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([resource, permissions]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - if isinstance(request, dict): - # The request isn't a proto-plus wrapped type, - # so it must be constructed via keyword expansion. - request = iam_policy_pb2.TestIamPermissionsRequest(**request) - elif not request: - # Null request, just make one. - request = iam_policy_pb2.TestIamPermissionsRequest() - if resource is not None: - request.resource = resource - if permissions: - request.permissions.extend(permissions) - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.test_iam_permissions] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("resource", request.resource), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_finding(self, - request: Optional[Union[securitycenter_service.UpdateFindingRequest, dict]] = None, - *, - finding: Optional[gcs_finding.Finding] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_finding.Finding: - r"""Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest, dict]): - The request object. Request message for updating or - creating a finding. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the - name must be alphanumeric and less than or equal to 32 - characters and greater than 0 characters in length. - - This corresponds to the ``finding`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a - finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing - source_properties. Individual source_properties can be - added/updated by using "source_properties." in the field - mask. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([finding, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateFindingRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateFindingRequest): - request = securitycenter_service.UpdateFindingRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if finding is not None: - request.finding = finding - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_finding] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("finding.name", request.finding.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_notification_config(self, - request: Optional[Union[securitycenter_service.UpdateNotificationConfigRequest, dict]] = None, - *, - notification_config: Optional[gcs_notification_config.NotificationConfig] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_notification_config.NotificationConfig: - r"""Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest, dict]): - The request object. Request message for updating a - notification config. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config to - update. - - This corresponds to the ``notification_config`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the notification config. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([notification_config, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateNotificationConfigRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateNotificationConfigRequest): - request = securitycenter_service.UpdateNotificationConfigRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if notification_config is not None: - request.notification_config = notification_config - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_notification_config] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("notification_config.name", request.notification_config.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_organization_settings(self, - request: Optional[Union[securitycenter_service.UpdateOrganizationSettingsRequest, dict]] = None, - *, - organization_settings: Optional[gcs_organization_settings.OrganizationSettings] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Updates an organization's settings. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest, dict]): - The request object. Request message for updating an - organization's settings. - organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): - Required. The organization settings - resource to update. - - This corresponds to the ``organization_settings`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([organization_settings]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateOrganizationSettingsRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateOrganizationSettingsRequest): - request = securitycenter_service.UpdateOrganizationSettingsRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if organization_settings is not None: - request.organization_settings = organization_settings - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_organization_settings] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("organization_settings.name", request.organization_settings.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_source(self, - request: Optional[Union[securitycenter_service.UpdateSourceRequest, dict]] = None, - *, - source: Optional[gcs_source.Source] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_source.Source: - r"""Updates a source. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest, dict]): - The request object. Request message for updating a - source. - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The source resource to - update. - - This corresponds to the ``source`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating - the source resource. - If empty all mutable fields will be - updated. - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([source, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSourceRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSourceRequest): - request = securitycenter_service.UpdateSourceRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if source is not None: - request.source = source - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_source] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("source.name", request.source.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def update_security_marks(self, - request: Optional[Union[securitycenter_service.UpdateSecurityMarksRequest, dict]] = None, - *, - security_marks: Optional[gcs_security_marks.SecurityMarks] = None, - update_mask: Optional[field_mask_pb2.FieldMask] = None, - retry: OptionalRetry = gapic_v1.method.DEFAULT, - timeout: Union[float, object] = gapic_v1.method.DEFAULT, - metadata: Sequence[Tuple[str, str]] = (), - ) -> gcs_security_marks.SecurityMarks: - r"""Updates security marks. - - .. code-block:: python - - # This snippet has been automatically generated and should be regarded as a - # code template only. - # It will require modifications to work: - # - It may require correct/in-range values for request initialization. - # - It may require specifying regional endpoints when creating the service - # client as shown in: - # https://googleapis.dev/python/google-api-core/latest/client_options.html - from google.cloud import securitycenter_v1p1beta1 - - def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - - Args: - request (Union[google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest, dict]): - The request object. Request message for updating a - SecurityMarks resource. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Required. The security marks resource - to update. - - This corresponds to the ``security_marks`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If - empty or set to "marks", all marks will be replaced. - Individual marks can be updated using - "marks.". - - This corresponds to the ``update_mask`` field - on the ``request`` instance; if ``request`` is provided, this - should not be set. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - google.cloud.securitycenter_v1p1beta1.types.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - # Create or coerce a protobuf request object. - # Quick check: If we got a request object, we should *not* have - # gotten any keyword arguments that map to the request. - has_flattened_params = any([security_marks, update_mask]) - if request is not None and has_flattened_params: - raise ValueError('If the `request` argument is set, then none of ' - 'the individual field arguments should be set.') - - # Minor optimization to avoid making a copy if the user passes - # in a securitycenter_service.UpdateSecurityMarksRequest. - # There's no risk of modifying the input as we've already verified - # there are no flattened fields. - if not isinstance(request, securitycenter_service.UpdateSecurityMarksRequest): - request = securitycenter_service.UpdateSecurityMarksRequest(request) - # If we have keyword arguments corresponding to fields on the - # request, apply these. - if security_marks is not None: - request.security_marks = security_marks - if update_mask is not None: - request.update_mask = update_mask - - # Wrap the RPC method; this adds retry and timeout information, - # and friendly error handling. - rpc = self._transport._wrapped_methods[self._transport.update_security_marks] - - # Certain fields should be provided within the metadata header; - # add these here. - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ("security_marks.name", request.security_marks.name), - )), - ) - - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) - - # Done; return the response. - return response - - def __enter__(self) -> "SecurityCenterClient": - return self - - def __exit__(self, type, value, traceback): - """Releases underlying transport's resources. - - .. warning:: - ONLY use as a context manager if the transport is NOT shared - with other clients! Exiting the with block will CLOSE the transport - and may cause errors in other clients! - """ - self.transport.close() - - - - - - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -__all__ = ( - "SecurityCenterClient", -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py deleted file mode 100644 index 43850428..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/pagers.py +++ /dev/null @@ -1,746 +0,0 @@ -# -*- 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. -# -from typing import Any, AsyncIterator, Awaitable, Callable, Sequence, Tuple, Optional, Iterator - -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source - - -class GroupAssetsPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupAssetsResponse], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupAssetsAsyncPager: - """A pager for iterating through ``group_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupAssets`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupAssetsResponse]], - request: securitycenter_service.GroupAssetsRequest, - response: securitycenter_service.GroupAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.GroupFindingsResponse], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.GroupResult]: - for page in self.pages: - yield from page.group_by_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class GroupFindingsAsyncPager: - """A pager for iterating through ``group_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``group_by_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``GroupFindings`` requests and continue to iterate - through the ``group_by_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.GroupFindingsResponse]], - request: securitycenter_service.GroupFindingsRequest, - response: securitycenter_service.GroupFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.GroupFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.GroupFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.GroupFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.GroupResult]: - async def async_generator(): - async for page in self.pages: - for response in page.group_by_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListAssetsResponse], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - for page in self.pages: - yield from page.list_assets_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListAssetsAsyncPager: - """A pager for iterating through ``list_assets`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_assets_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListAssets`` requests and continue to iterate - through the ``list_assets_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListAssetsResponse]], - request: securitycenter_service.ListAssetsRequest, - response: securitycenter_service.ListAssetsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListAssetsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListAssetsResponse.ListAssetsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_assets_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListFindingsResponse], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - for page in self.pages: - yield from page.list_findings_results - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListFindingsAsyncPager: - """A pager for iterating through ``list_findings`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``list_findings_results`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListFindings`` requests and continue to iterate - through the ``list_findings_results`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListFindingsResponse]], - request: securitycenter_service.ListFindingsRequest, - response: securitycenter_service.ListFindingsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListFindingsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[securitycenter_service.ListFindingsResponse.ListFindingsResult]: - async def async_generator(): - async for page in self.pages: - for response in page.list_findings_results: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and - provides an ``__iter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListNotificationConfigsResponse], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[notification_config.NotificationConfig]: - for page in self.pages: - yield from page.notification_configs - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListNotificationConfigsAsyncPager: - """A pager for iterating through ``list_notification_configs`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``notification_configs`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListNotificationConfigs`` requests and continue to iterate - through the ``notification_configs`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListNotificationConfigsResponse]], - request: securitycenter_service.ListNotificationConfigsRequest, - response: securitycenter_service.ListNotificationConfigsResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListNotificationConfigsRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListNotificationConfigsResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[notification_config.NotificationConfig]: - async def async_generator(): - async for page in self.pages: - for response in page.notification_configs: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and - provides an ``__iter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__iter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., securitycenter_service.ListSourcesResponse], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiate the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - def pages(self) -> Iterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = self._method(self._request, metadata=self._metadata) - yield self._response - - def __iter__(self) -> Iterator[source.Source]: - for page in self.pages: - yield from page.sources - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) - - -class ListSourcesAsyncPager: - """A pager for iterating through ``list_sources`` requests. - - This class thinly wraps an initial - :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` object, and - provides an ``__aiter__`` method to iterate through its - ``sources`` field. - - If there are more pages, the ``__aiter__`` method will make additional - ``ListSources`` requests and continue to iterate - through the ``sources`` field on the - corresponding responses. - - All the usual :class:`google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse` - attributes are available on the pager. If multiple requests are made, only - the most recent response is retained, and thus used for attribute lookup. - """ - def __init__(self, - method: Callable[..., Awaitable[securitycenter_service.ListSourcesResponse]], - request: securitycenter_service.ListSourcesRequest, - response: securitycenter_service.ListSourcesResponse, - *, - metadata: Sequence[Tuple[str, str]] = ()): - """Instantiates the pager. - - Args: - method (Callable): The method that was originally called, and - which instantiated this pager. - request (google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest): - The initial request object. - response (google.cloud.securitycenter_v1p1beta1.types.ListSourcesResponse): - The initial response object. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - self._method = method - self._request = securitycenter_service.ListSourcesRequest(request) - self._response = response - self._metadata = metadata - - def __getattr__(self, name: str) -> Any: - return getattr(self._response, name) - - @property - async def pages(self) -> AsyncIterator[securitycenter_service.ListSourcesResponse]: - yield self._response - while self._response.next_page_token: - self._request.page_token = self._response.next_page_token - self._response = await self._method(self._request, metadata=self._metadata) - yield self._response - def __aiter__(self) -> AsyncIterator[source.Source]: - async def async_generator(): - async for page in self.pages: - for response in page.sources: - yield response - - return async_generator() - - def __repr__(self) -> str: - return '{0}<{1!r}>'.format(self.__class__.__name__, self._response) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py deleted file mode 100644 index be15b558..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- 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. -# -from collections import OrderedDict -from typing import Dict, Type - -from .base import SecurityCenterTransport -from .grpc import SecurityCenterGrpcTransport -from .grpc_asyncio import SecurityCenterGrpcAsyncIOTransport -from .rest import SecurityCenterRestTransport -from .rest import SecurityCenterRestInterceptor - - -# Compile a registry of transports. -_transport_registry = OrderedDict() # type: Dict[str, Type[SecurityCenterTransport]] -_transport_registry['grpc'] = SecurityCenterGrpcTransport -_transport_registry['grpc_asyncio'] = SecurityCenterGrpcAsyncIOTransport -_transport_registry['rest'] = SecurityCenterRestTransport - -__all__ = ( - 'SecurityCenterTransport', - 'SecurityCenterGrpcTransport', - 'SecurityCenterGrpcAsyncIOTransport', - 'SecurityCenterRestTransport', - 'SecurityCenterRestInterceptor', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py deleted file mode 100644 index a714de00..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/base.py +++ /dev/null @@ -1,552 +0,0 @@ -# -*- 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 abc -from typing import Awaitable, Callable, Dict, Optional, Sequence, Union - -from google.cloud.securitycenter_v1p1beta1 import gapic_version as package_version - -import google.auth # type: ignore -import google.api_core -from google.api_core import exceptions as core_exceptions -from google.api_core import gapic_v1 -from google.api_core import retry as retries -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.oauth2 import service_account # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo(gapic_version=package_version.__version__) - - -class SecurityCenterTransport(abc.ABC): - """Abstract transport class for SecurityCenter.""" - - AUTH_SCOPES = ( - 'https://www.googleapis.com/auth/cloud-platform', - ) - - DEFAULT_HOST: str = 'securitycenter.googleapis.com' - def __init__( - self, *, - host: str = DEFAULT_HOST, - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - **kwargs, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A list of scopes. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - """ - - scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} - - # Save the scopes. - self._scopes = scopes - - # If no credentials are provided, then determine the appropriate - # defaults. - if credentials and credentials_file: - raise core_exceptions.DuplicateCredentialArgs("'credentials_file' and 'credentials' are mutually exclusive") - - if credentials_file is not None: - credentials, _ = google.auth.load_credentials_from_file( - credentials_file, - **scopes_kwargs, - quota_project_id=quota_project_id - ) - elif credentials is None: - credentials, _ = google.auth.default(**scopes_kwargs, quota_project_id=quota_project_id) - # Don't apply audience if the credentials file passed from user. - if hasattr(credentials, "with_gdch_audience"): - credentials = credentials.with_gdch_audience(api_audience if api_audience else host) - - # If the credentials are service account credentials, then always try to use self signed JWT. - if always_use_jwt_access and isinstance(credentials, service_account.Credentials) and hasattr(service_account.Credentials, "with_always_use_jwt_access"): - credentials = credentials.with_always_use_jwt_access(True) - - # Save the credentials. - self._credentials = credentials - - # Save the hostname. Default to port 443 (HTTPS) if none is specified. - if ':' not in host: - host += ':443' - self._host = host - - def _prep_wrapped_messages(self, client_info): - # Precompute the wrapped methods. - self._wrapped_methods = { - self.create_source: gapic_v1.method.wrap_method( - self.create_source, - default_timeout=60.0, - client_info=client_info, - ), - self.create_finding: gapic_v1.method.wrap_method( - self.create_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.create_notification_config: gapic_v1.method.wrap_method( - self.create_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.delete_notification_config: gapic_v1.method.wrap_method( - self.delete_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.get_iam_policy: gapic_v1.method.wrap_method( - self.get_iam_policy, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_notification_config: gapic_v1.method.wrap_method( - self.get_notification_config, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_organization_settings: gapic_v1.method.wrap_method( - self.get_organization_settings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.get_source: gapic_v1.method.wrap_method( - self.get_source, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.group_assets: gapic_v1.method.wrap_method( - self.group_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.group_findings: gapic_v1.method.wrap_method( - self.group_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_assets: gapic_v1.method.wrap_method( - self.list_assets, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_findings: gapic_v1.method.wrap_method( - self.list_findings, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=480.0, - ), - default_timeout=480.0, - client_info=client_info, - ), - self.list_notification_configs: gapic_v1.method.wrap_method( - self.list_notification_configs, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.list_sources: gapic_v1.method.wrap_method( - self.list_sources, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.run_asset_discovery: gapic_v1.method.wrap_method( - self.run_asset_discovery, - default_timeout=60.0, - client_info=client_info, - ), - self.set_finding_state: gapic_v1.method.wrap_method( - self.set_finding_state, - default_timeout=60.0, - client_info=client_info, - ), - self.set_iam_policy: gapic_v1.method.wrap_method( - self.set_iam_policy, - default_timeout=60.0, - client_info=client_info, - ), - self.test_iam_permissions: gapic_v1.method.wrap_method( - self.test_iam_permissions, - default_retry=retries.Retry( -initial=0.1,maximum=60.0,multiplier=1.3, predicate=retries.if_exception_type( - core_exceptions.DeadlineExceeded, - core_exceptions.ServiceUnavailable, - ), - deadline=60.0, - ), - default_timeout=60.0, - client_info=client_info, - ), - self.update_finding: gapic_v1.method.wrap_method( - self.update_finding, - default_timeout=60.0, - client_info=client_info, - ), - self.update_notification_config: gapic_v1.method.wrap_method( - self.update_notification_config, - default_timeout=60.0, - client_info=client_info, - ), - self.update_organization_settings: gapic_v1.method.wrap_method( - self.update_organization_settings, - default_timeout=60.0, - client_info=client_info, - ), - self.update_source: gapic_v1.method.wrap_method( - self.update_source, - default_timeout=60.0, - client_info=client_info, - ), - self.update_security_marks: gapic_v1.method.wrap_method( - self.update_security_marks, - default_timeout=480.0, - client_info=client_info, - ), - } - - def close(self): - """Closes resources associated with the transport. - - .. warning:: - Only call this method if the transport is NOT shared - with other clients - this may cause errors in other clients! - """ - raise NotImplementedError() - - @property - def operations_client(self): - """Return the client designed to process long-running operations.""" - raise NotImplementedError() - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Union[ - empty_pb2.Empty, - Awaitable[empty_pb2.Empty] - ]]: - raise NotImplementedError() - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Union[ - notification_config.NotificationConfig, - Awaitable[notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Union[ - organization_settings.OrganizationSettings, - Awaitable[organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Union[ - source.Source, - Awaitable[source.Source] - ]]: - raise NotImplementedError() - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Union[ - securitycenter_service.GroupAssetsResponse, - Awaitable[securitycenter_service.GroupAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Union[ - securitycenter_service.GroupFindingsResponse, - Awaitable[securitycenter_service.GroupFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Union[ - securitycenter_service.ListAssetsResponse, - Awaitable[securitycenter_service.ListAssetsResponse] - ]]: - raise NotImplementedError() - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Union[ - securitycenter_service.ListFindingsResponse, - Awaitable[securitycenter_service.ListFindingsResponse] - ]]: - raise NotImplementedError() - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Union[ - securitycenter_service.ListNotificationConfigsResponse, - Awaitable[securitycenter_service.ListNotificationConfigsResponse] - ]]: - raise NotImplementedError() - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Union[ - securitycenter_service.ListSourcesResponse, - Awaitable[securitycenter_service.ListSourcesResponse] - ]]: - raise NotImplementedError() - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Union[ - operations_pb2.Operation, - Awaitable[operations_pb2.Operation] - ]]: - raise NotImplementedError() - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Union[ - finding.Finding, - Awaitable[finding.Finding] - ]]: - raise NotImplementedError() - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Union[ - policy_pb2.Policy, - Awaitable[policy_pb2.Policy] - ]]: - raise NotImplementedError() - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Union[ - iam_policy_pb2.TestIamPermissionsResponse, - Awaitable[iam_policy_pb2.TestIamPermissionsResponse] - ]]: - raise NotImplementedError() - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Union[ - gcs_finding.Finding, - Awaitable[gcs_finding.Finding] - ]]: - raise NotImplementedError() - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Union[ - gcs_notification_config.NotificationConfig, - Awaitable[gcs_notification_config.NotificationConfig] - ]]: - raise NotImplementedError() - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Union[ - gcs_organization_settings.OrganizationSettings, - Awaitable[gcs_organization_settings.OrganizationSettings] - ]]: - raise NotImplementedError() - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Union[ - gcs_source.Source, - Awaitable[gcs_source.Source] - ]]: - raise NotImplementedError() - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Union[ - gcs_security_marks.SecurityMarks, - Awaitable[gcs_security_marks.SecurityMarks] - ]]: - raise NotImplementedError() - - @property - def kind(self) -> str: - raise NotImplementedError() - - -__all__ = ( - 'SecurityCenterTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py deleted file mode 100644 index 50fdbe6a..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc.py +++ /dev/null @@ -1,889 +0,0 @@ -# -*- 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 warnings -from typing import Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import grpc_helpers -from google.api_core import operations_v1 -from google.api_core import gapic_v1 -import google.auth # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO - - -class SecurityCenterGrpcTransport(SecurityCenterTransport): - """gRPC backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - _stubs: Dict[str, Callable] - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[grpc.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - channel (Optional[grpc.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> grpc.Channel: - """Create and return a gRPC channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is mutually exclusive with credentials. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - grpc.Channel: A gRPC channel object. - - Raises: - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - - return grpc_helpers.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - @property - def grpc_channel(self) -> grpc.Channel: - """Return the channel designed to connect to this service. - """ - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - ~.Empty]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - ~.GroupAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - ~.GroupFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - ~.ListAssetsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - ~.ListFindingsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - ~.ListNotificationConfigsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - ~.ListSourcesResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - ~.Operation]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - ~.Policy]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - ~.TestIamPermissionsResponse]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - ~.Finding]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - ~.NotificationConfig]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - ~.OrganizationSettings]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - ~.Source]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - ~.SecurityMarks]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - self.grpc_channel.close() - - @property - def kind(self) -> str: - return "grpc" - - -__all__ = ( - 'SecurityCenterGrpcTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py deleted file mode 100644 index 5376ce4f..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/grpc_asyncio.py +++ /dev/null @@ -1,888 +0,0 @@ -# -*- 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 warnings -from typing import Awaitable, Callable, Dict, Optional, Sequence, Tuple, Union - -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers_async -from google.api_core import operations_v1 -from google.auth import credentials as ga_credentials # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore - -import grpc # type: ignore -from grpc.experimental import aio # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO -from .grpc import SecurityCenterGrpcTransport - - -class SecurityCenterGrpcAsyncIOTransport(SecurityCenterTransport): - """gRPC AsyncIO backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends protocol buffers over the wire using gRPC (which is built on - top of HTTP/2); the ``grpcio`` package must be installed. - """ - - _grpc_channel: aio.Channel - _stubs: Dict[str, Callable] = {} - - @classmethod - def create_channel(cls, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - quota_project_id: Optional[str] = None, - **kwargs) -> aio.Channel: - """Create and return a gRPC AsyncIO channel object. - Args: - host (Optional[str]): The host for the channel to use. - credentials (Optional[~.Credentials]): The - authorization credentials to attach to requests. These - credentials identify this application to the service. If - none are specified, the client will attempt to ascertain - the credentials from the environment. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - kwargs (Optional[dict]): Keyword arguments, which are passed to the - channel creation. - Returns: - aio.Channel: A gRPC AsyncIO channel object. - """ - - return grpc_helpers_async.create_channel( - host, - credentials=credentials, - credentials_file=credentials_file, - quota_project_id=quota_project_id, - default_scopes=cls.AUTH_SCOPES, - scopes=scopes, - default_host=cls.DEFAULT_HOST, - **kwargs - ) - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - channel: Optional[aio.Channel] = None, - api_mtls_endpoint: Optional[str] = None, - client_cert_source: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - ssl_channel_credentials: Optional[grpc.ChannelCredentials] = None, - client_cert_source_for_mtls: Optional[Callable[[], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - This argument is ignored if ``channel`` is provided. - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional[Sequence[str]]): A optional list of scopes needed for this - service. These are only used when credentials are not specified and - are passed to :func:`google.auth.default`. - channel (Optional[aio.Channel]): A ``Channel`` instance through - which to make calls. - api_mtls_endpoint (Optional[str]): Deprecated. The mutual TLS endpoint. - If provided, it overrides the ``host`` argument and tries to create - a mutual TLS channel with client SSL credentials from - ``client_cert_source`` or application default SSL credentials. - client_cert_source (Optional[Callable[[], Tuple[bytes, bytes]]]): - Deprecated. A callback to provide client SSL certificate bytes and - private key bytes, both in PEM format. It is ignored if - ``api_mtls_endpoint`` is None. - ssl_channel_credentials (grpc.ChannelCredentials): SSL credentials - for the grpc channel. It is ignored if ``channel`` is provided. - client_cert_source_for_mtls (Optional[Callable[[], Tuple[bytes, bytes]]]): - A callback to provide client certificate bytes and private key bytes, - both in PEM format. It is used to configure a mutual TLS channel. It is - ignored if ``channel`` or ``ssl_channel_credentials`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you're developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - - Raises: - google.auth.exceptions.MutualTlsChannelError: If mutual TLS transport - creation failed for any reason. - google.api_core.exceptions.DuplicateCredentialArgs: If both ``credentials`` - and ``credentials_file`` are passed. - """ - self._grpc_channel = None - self._ssl_channel_credentials = ssl_channel_credentials - self._stubs: Dict[str, Callable] = {} - self._operations_client: Optional[operations_v1.OperationsAsyncClient] = None - - if api_mtls_endpoint: - warnings.warn("api_mtls_endpoint is deprecated", DeprecationWarning) - if client_cert_source: - warnings.warn("client_cert_source is deprecated", DeprecationWarning) - - if channel: - # Ignore credentials if a channel was passed. - credentials = False - # If a channel was explicitly provided, set it. - self._grpc_channel = channel - self._ssl_channel_credentials = None - else: - if api_mtls_endpoint: - host = api_mtls_endpoint - - # Create SSL credentials with client_cert_source or application - # default SSL credentials. - if client_cert_source: - cert, key = client_cert_source() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - else: - self._ssl_channel_credentials = SslCredentials().ssl_credentials - - else: - if client_cert_source_for_mtls and not ssl_channel_credentials: - cert, key = client_cert_source_for_mtls() - self._ssl_channel_credentials = grpc.ssl_channel_credentials( - certificate_chain=cert, private_key=key - ) - - # The base transport sets the host, credentials and scopes - super().__init__( - host=host, - credentials=credentials, - credentials_file=credentials_file, - scopes=scopes, - quota_project_id=quota_project_id, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience, - ) - - if not self._grpc_channel: - self._grpc_channel = type(self).create_channel( - self._host, - # use the credentials which are saved - credentials=self._credentials, - # Set ``credentials_file`` to ``None`` here as - # the credentials that we saved earlier should be used. - credentials_file=None, - scopes=self._scopes, - ssl_credentials=self._ssl_channel_credentials, - quota_project_id=quota_project_id, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Wrap messages. This must be done after self._grpc_channel exists - self._prep_wrapped_messages(client_info) - - @property - def grpc_channel(self) -> aio.Channel: - """Create the channel designed to connect to this service. - - This property caches on the instance; repeated calls return - the same channel. - """ - # Return the channel from cache. - return self._grpc_channel - - @property - def operations_client(self) -> operations_v1.OperationsAsyncClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Quick check: Only create a new client if we do not already have one. - if self._operations_client is None: - self._operations_client = operations_v1.OperationsAsyncClient( - self.grpc_channel - ) - - # Return the client from cache. - return self._operations_client - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the create source method over gRPC. - - Creates a source. - - Returns: - Callable[[~.CreateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_source' not in self._stubs: - self._stubs['create_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateSource', - request_serializer=securitycenter_service.CreateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['create_source'] - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the create finding method over gRPC. - - Creates a finding. The corresponding source must - exist for finding creation to succeed. - - Returns: - Callable[[~.CreateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_finding' not in self._stubs: - self._stubs['create_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateFinding', - request_serializer=securitycenter_service.CreateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['create_finding'] - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the create notification config method over gRPC. - - Creates a notification config. - - Returns: - Callable[[~.CreateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'create_notification_config' not in self._stubs: - self._stubs['create_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/CreateNotificationConfig', - request_serializer=securitycenter_service.CreateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['create_notification_config'] - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - Awaitable[empty_pb2.Empty]]: - r"""Return a callable for the delete notification config method over gRPC. - - Deletes a notification config. - - Returns: - Callable[[~.DeleteNotificationConfigRequest], - Awaitable[~.Empty]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'delete_notification_config' not in self._stubs: - self._stubs['delete_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/DeleteNotificationConfig', - request_serializer=securitycenter_service.DeleteNotificationConfigRequest.serialize, - response_deserializer=empty_pb2.Empty.FromString, - ) - return self._stubs['delete_notification_config'] - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the get iam policy method over gRPC. - - Gets the access control policy on the specified - Source. - - Returns: - Callable[[~.GetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_iam_policy' not in self._stubs: - self._stubs['get_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetIamPolicy', - request_serializer=iam_policy_pb2.GetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['get_iam_policy'] - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - Awaitable[notification_config.NotificationConfig]]: - r"""Return a callable for the get notification config method over gRPC. - - Gets a notification config. - - Returns: - Callable[[~.GetNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_notification_config' not in self._stubs: - self._stubs['get_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetNotificationConfig', - request_serializer=securitycenter_service.GetNotificationConfigRequest.serialize, - response_deserializer=notification_config.NotificationConfig.deserialize, - ) - return self._stubs['get_notification_config'] - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - Awaitable[organization_settings.OrganizationSettings]]: - r"""Return a callable for the get organization settings method over gRPC. - - Gets the settings for an organization. - - Returns: - Callable[[~.GetOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_organization_settings' not in self._stubs: - self._stubs['get_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetOrganizationSettings', - request_serializer=securitycenter_service.GetOrganizationSettingsRequest.serialize, - response_deserializer=organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['get_organization_settings'] - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - Awaitable[source.Source]]: - r"""Return a callable for the get source method over gRPC. - - Gets a source. - - Returns: - Callable[[~.GetSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'get_source' not in self._stubs: - self._stubs['get_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GetSource', - request_serializer=securitycenter_service.GetSourceRequest.serialize, - response_deserializer=source.Source.deserialize, - ) - return self._stubs['get_source'] - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - Awaitable[securitycenter_service.GroupAssetsResponse]]: - r"""Return a callable for the group assets method over gRPC. - - Filters an organization's assets and groups them by - their specified properties. - - Returns: - Callable[[~.GroupAssetsRequest], - Awaitable[~.GroupAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_assets' not in self._stubs: - self._stubs['group_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupAssets', - request_serializer=securitycenter_service.GroupAssetsRequest.serialize, - response_deserializer=securitycenter_service.GroupAssetsResponse.deserialize, - ) - return self._stubs['group_assets'] - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - Awaitable[securitycenter_service.GroupFindingsResponse]]: - r"""Return a callable for the group findings method over gRPC. - - Filters an organization or source's findings and groups them by - their specified properties. - - To group across all sources provide a ``-`` as the source id. - Example: /v1/organizations/{organization_id}/sources/-/findings, - /v1/folders/{folder_id}/sources/-/findings, - /v1/projects/{project_id}/sources/-/findings - - Returns: - Callable[[~.GroupFindingsRequest], - Awaitable[~.GroupFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'group_findings' not in self._stubs: - self._stubs['group_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/GroupFindings', - request_serializer=securitycenter_service.GroupFindingsRequest.serialize, - response_deserializer=securitycenter_service.GroupFindingsResponse.deserialize, - ) - return self._stubs['group_findings'] - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - Awaitable[securitycenter_service.ListAssetsResponse]]: - r"""Return a callable for the list assets method over gRPC. - - Lists an organization's assets. - - Returns: - Callable[[~.ListAssetsRequest], - Awaitable[~.ListAssetsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_assets' not in self._stubs: - self._stubs['list_assets'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListAssets', - request_serializer=securitycenter_service.ListAssetsRequest.serialize, - response_deserializer=securitycenter_service.ListAssetsResponse.deserialize, - ) - return self._stubs['list_assets'] - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - Awaitable[securitycenter_service.ListFindingsResponse]]: - r"""Return a callable for the list findings method over gRPC. - - Lists an organization or source's findings. - - To list across all sources provide a ``-`` as the source id. - Example: - /v1p1beta1/organizations/{organization_id}/sources/-/findings - - Returns: - Callable[[~.ListFindingsRequest], - Awaitable[~.ListFindingsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_findings' not in self._stubs: - self._stubs['list_findings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListFindings', - request_serializer=securitycenter_service.ListFindingsRequest.serialize, - response_deserializer=securitycenter_service.ListFindingsResponse.deserialize, - ) - return self._stubs['list_findings'] - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - Awaitable[securitycenter_service.ListNotificationConfigsResponse]]: - r"""Return a callable for the list notification configs method over gRPC. - - Lists notification configs. - - Returns: - Callable[[~.ListNotificationConfigsRequest], - Awaitable[~.ListNotificationConfigsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_notification_configs' not in self._stubs: - self._stubs['list_notification_configs'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListNotificationConfigs', - request_serializer=securitycenter_service.ListNotificationConfigsRequest.serialize, - response_deserializer=securitycenter_service.ListNotificationConfigsResponse.deserialize, - ) - return self._stubs['list_notification_configs'] - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - Awaitable[securitycenter_service.ListSourcesResponse]]: - r"""Return a callable for the list sources method over gRPC. - - Lists all sources belonging to an organization. - - Returns: - Callable[[~.ListSourcesRequest], - Awaitable[~.ListSourcesResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'list_sources' not in self._stubs: - self._stubs['list_sources'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/ListSources', - request_serializer=securitycenter_service.ListSourcesRequest.serialize, - response_deserializer=securitycenter_service.ListSourcesResponse.deserialize, - ) - return self._stubs['list_sources'] - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - Awaitable[operations_pb2.Operation]]: - r"""Return a callable for the run asset discovery method over gRPC. - - Runs asset discovery. The discovery is tracked with a - long-running operation. - - This API can only be called with limited frequency for an - organization. If it is called too frequently the caller will - receive a TOO_MANY_REQUESTS error. - - Returns: - Callable[[~.RunAssetDiscoveryRequest], - Awaitable[~.Operation]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'run_asset_discovery' not in self._stubs: - self._stubs['run_asset_discovery'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/RunAssetDiscovery', - request_serializer=securitycenter_service.RunAssetDiscoveryRequest.serialize, - response_deserializer=operations_pb2.Operation.FromString, - ) - return self._stubs['run_asset_discovery'] - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - Awaitable[finding.Finding]]: - r"""Return a callable for the set finding state method over gRPC. - - Updates the state of a finding. - - Returns: - Callable[[~.SetFindingStateRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_finding_state' not in self._stubs: - self._stubs['set_finding_state'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetFindingState', - request_serializer=securitycenter_service.SetFindingStateRequest.serialize, - response_deserializer=finding.Finding.deserialize, - ) - return self._stubs['set_finding_state'] - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - Awaitable[policy_pb2.Policy]]: - r"""Return a callable for the set iam policy method over gRPC. - - Sets the access control policy on the specified - Source. - - Returns: - Callable[[~.SetIamPolicyRequest], - Awaitable[~.Policy]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'set_iam_policy' not in self._stubs: - self._stubs['set_iam_policy'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/SetIamPolicy', - request_serializer=iam_policy_pb2.SetIamPolicyRequest.SerializeToString, - response_deserializer=policy_pb2.Policy.FromString, - ) - return self._stubs['set_iam_policy'] - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - Awaitable[iam_policy_pb2.TestIamPermissionsResponse]]: - r"""Return a callable for the test iam permissions method over gRPC. - - Returns the permissions that a caller has on the - specified source. - - Returns: - Callable[[~.TestIamPermissionsRequest], - Awaitable[~.TestIamPermissionsResponse]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'test_iam_permissions' not in self._stubs: - self._stubs['test_iam_permissions'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/TestIamPermissions', - request_serializer=iam_policy_pb2.TestIamPermissionsRequest.SerializeToString, - response_deserializer=iam_policy_pb2.TestIamPermissionsResponse.FromString, - ) - return self._stubs['test_iam_permissions'] - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - Awaitable[gcs_finding.Finding]]: - r"""Return a callable for the update finding method over gRPC. - - Creates or updates a finding. The corresponding - source must exist for a finding creation to succeed. - - Returns: - Callable[[~.UpdateFindingRequest], - Awaitable[~.Finding]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_finding' not in self._stubs: - self._stubs['update_finding'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateFinding', - request_serializer=securitycenter_service.UpdateFindingRequest.serialize, - response_deserializer=gcs_finding.Finding.deserialize, - ) - return self._stubs['update_finding'] - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - Awaitable[gcs_notification_config.NotificationConfig]]: - r"""Return a callable for the update notification config method over gRPC. - - Updates a notification config. The following update fields are - allowed: description, pubsub_topic, streaming_config.filter - - Returns: - Callable[[~.UpdateNotificationConfigRequest], - Awaitable[~.NotificationConfig]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_notification_config' not in self._stubs: - self._stubs['update_notification_config'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateNotificationConfig', - request_serializer=securitycenter_service.UpdateNotificationConfigRequest.serialize, - response_deserializer=gcs_notification_config.NotificationConfig.deserialize, - ) - return self._stubs['update_notification_config'] - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - Awaitable[gcs_organization_settings.OrganizationSettings]]: - r"""Return a callable for the update organization settings method over gRPC. - - Updates an organization's settings. - - Returns: - Callable[[~.UpdateOrganizationSettingsRequest], - Awaitable[~.OrganizationSettings]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_organization_settings' not in self._stubs: - self._stubs['update_organization_settings'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateOrganizationSettings', - request_serializer=securitycenter_service.UpdateOrganizationSettingsRequest.serialize, - response_deserializer=gcs_organization_settings.OrganizationSettings.deserialize, - ) - return self._stubs['update_organization_settings'] - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - Awaitable[gcs_source.Source]]: - r"""Return a callable for the update source method over gRPC. - - Updates a source. - - Returns: - Callable[[~.UpdateSourceRequest], - Awaitable[~.Source]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_source' not in self._stubs: - self._stubs['update_source'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSource', - request_serializer=securitycenter_service.UpdateSourceRequest.serialize, - response_deserializer=gcs_source.Source.deserialize, - ) - return self._stubs['update_source'] - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - Awaitable[gcs_security_marks.SecurityMarks]]: - r"""Return a callable for the update security marks method over gRPC. - - Updates security marks. - - Returns: - Callable[[~.UpdateSecurityMarksRequest], - Awaitable[~.SecurityMarks]]: - A function that, when called, will call the underlying RPC - on the server. - """ - # Generate a "stub function" on-the-fly which will actually make - # the request. - # gRPC handles serialization and deserialization, so we just need - # to pass in the functions for each. - if 'update_security_marks' not in self._stubs: - self._stubs['update_security_marks'] = self.grpc_channel.unary_unary( - '/google.cloud.securitycenter.v1p1beta1.SecurityCenter/UpdateSecurityMarks', - request_serializer=securitycenter_service.UpdateSecurityMarksRequest.serialize, - response_deserializer=gcs_security_marks.SecurityMarks.deserialize, - ) - return self._stubs['update_security_marks'] - - def close(self): - return self.grpc_channel.close() - - -__all__ = ( - 'SecurityCenterGrpcAsyncIOTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py deleted file mode 100644 index bdf7e4a6..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/services/security_center/transports/rest.py +++ /dev/null @@ -1,3232 +0,0 @@ -# -*- 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. -# - -from google.auth.transport.requests import AuthorizedSession # type: ignore -import json # type: ignore -import grpc # type: ignore -from google.auth.transport.grpc import SslCredentials # type: ignore -from google.auth import credentials as ga_credentials # type: ignore -from google.api_core import exceptions as core_exceptions -from google.api_core import retry as retries -from google.api_core import rest_helpers -from google.api_core import rest_streaming -from google.api_core import path_template -from google.api_core import gapic_v1 - -from google.protobuf import json_format -from google.api_core import operations_v1 -from requests import __version__ as requests_version -import dataclasses -import re -from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Union -import warnings - -try: - OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] -except AttributeError: # pragma: NO COVER - OptionalRetry = Union[retries.Retry, object] # type: ignore - - -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore - -from .base import SecurityCenterTransport, DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO - - -DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( - gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, - grpc_version=None, - rest_version=requests_version, -) - - -class SecurityCenterRestInterceptor: - """Interceptor for SecurityCenter. - - Interceptors are used to manipulate requests, request metadata, and responses - in arbitrary ways. - Example use cases include: - * Logging - * Verifying requests according to service or custom semantics - * Stripping extraneous information from responses - - These use cases and more can be enabled by injecting an - instance of a custom subclass when constructing the SecurityCenterRestTransport. - - .. code-block:: python - class MyCustomSecurityCenterInterceptor(SecurityCenterRestInterceptor): - def pre_create_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_create_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_create_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_delete_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def pre_get_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_get_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_get_source(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_group_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_group_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_assets(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_assets(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_findings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_findings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_notification_configs(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_notification_configs(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_list_sources(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_list_sources(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_run_asset_discovery(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_run_asset_discovery(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_finding_state(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_finding_state(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_set_iam_policy(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_set_iam_policy(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_test_iam_permissions(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_test_iam_permissions(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_finding(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_finding(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_notification_config(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_notification_config(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_organization_settings(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_organization_settings(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_security_marks(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_security_marks(self, response): - logging.log(f"Received response: {response}") - return response - - def pre_update_source(self, request, metadata): - logging.log(f"Received request: {request}") - return request, metadata - - def post_update_source(self, response): - logging.log(f"Received response: {response}") - return response - - transport = SecurityCenterRestTransport(interceptor=MyCustomSecurityCenterInterceptor()) - client = SecurityCenterClient(transport=transport) - - - """ - def pre_create_finding(self, request: securitycenter_service.CreateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for create_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_notification_config(self, request: securitycenter_service.CreateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for create_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_create_source(self, request: securitycenter_service.CreateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.CreateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for create_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_create_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for create_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_delete_notification_config(self, request: securitycenter_service.DeleteNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.DeleteNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for delete_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def pre_get_iam_policy(self, request: iam_policy_pb2.GetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.GetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for get_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_notification_config(self, request: securitycenter_service.GetNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_notification_config(self, response: notification_config.NotificationConfig) -> notification_config.NotificationConfig: - """Post-rpc interceptor for get_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_organization_settings(self, request: securitycenter_service.GetOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_organization_settings(self, response: organization_settings.OrganizationSettings) -> organization_settings.OrganizationSettings: - """Post-rpc interceptor for get_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_get_source(self, request: securitycenter_service.GetSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GetSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for get_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_get_source(self, response: source.Source) -> source.Source: - """Post-rpc interceptor for get_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_assets(self, request: securitycenter_service.GroupAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_assets(self, response: securitycenter_service.GroupAssetsResponse) -> securitycenter_service.GroupAssetsResponse: - """Post-rpc interceptor for group_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_group_findings(self, request: securitycenter_service.GroupFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.GroupFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for group_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_group_findings(self, response: securitycenter_service.GroupFindingsResponse) -> securitycenter_service.GroupFindingsResponse: - """Post-rpc interceptor for group_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_assets(self, request: securitycenter_service.ListAssetsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListAssetsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_assets - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_assets(self, response: securitycenter_service.ListAssetsResponse) -> securitycenter_service.ListAssetsResponse: - """Post-rpc interceptor for list_assets - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_findings(self, request: securitycenter_service.ListFindingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListFindingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_findings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_findings(self, response: securitycenter_service.ListFindingsResponse) -> securitycenter_service.ListFindingsResponse: - """Post-rpc interceptor for list_findings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_notification_configs(self, request: securitycenter_service.ListNotificationConfigsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListNotificationConfigsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_notification_configs(self, response: securitycenter_service.ListNotificationConfigsResponse) -> securitycenter_service.ListNotificationConfigsResponse: - """Post-rpc interceptor for list_notification_configs - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_list_sources(self, request: securitycenter_service.ListSourcesRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.ListSourcesRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for list_sources - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_list_sources(self, response: securitycenter_service.ListSourcesResponse) -> securitycenter_service.ListSourcesResponse: - """Post-rpc interceptor for list_sources - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_run_asset_discovery(self, request: securitycenter_service.RunAssetDiscoveryRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.RunAssetDiscoveryRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_run_asset_discovery(self, response: operations_pb2.Operation) -> operations_pb2.Operation: - """Post-rpc interceptor for run_asset_discovery - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_finding_state(self, request: securitycenter_service.SetFindingStateRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.SetFindingStateRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_finding_state(self, response: finding.Finding) -> finding.Finding: - """Post-rpc interceptor for set_finding_state - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_set_iam_policy(self, request: iam_policy_pb2.SetIamPolicyRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.SetIamPolicyRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_set_iam_policy(self, response: policy_pb2.Policy) -> policy_pb2.Policy: - """Post-rpc interceptor for set_iam_policy - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_test_iam_permissions(self, request: iam_policy_pb2.TestIamPermissionsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[iam_policy_pb2.TestIamPermissionsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_test_iam_permissions(self, response: iam_policy_pb2.TestIamPermissionsResponse) -> iam_policy_pb2.TestIamPermissionsResponse: - """Post-rpc interceptor for test_iam_permissions - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_finding(self, request: securitycenter_service.UpdateFindingRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateFindingRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_finding - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_finding(self, response: gcs_finding.Finding) -> gcs_finding.Finding: - """Post-rpc interceptor for update_finding - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_notification_config(self, request: securitycenter_service.UpdateNotificationConfigRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateNotificationConfigRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_notification_config(self, response: gcs_notification_config.NotificationConfig) -> gcs_notification_config.NotificationConfig: - """Post-rpc interceptor for update_notification_config - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_organization_settings(self, request: securitycenter_service.UpdateOrganizationSettingsRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateOrganizationSettingsRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_organization_settings(self, response: gcs_organization_settings.OrganizationSettings) -> gcs_organization_settings.OrganizationSettings: - """Post-rpc interceptor for update_organization_settings - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_security_marks(self, request: securitycenter_service.UpdateSecurityMarksRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSecurityMarksRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_security_marks(self, response: gcs_security_marks.SecurityMarks) -> gcs_security_marks.SecurityMarks: - """Post-rpc interceptor for update_security_marks - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - def pre_update_source(self, request: securitycenter_service.UpdateSourceRequest, metadata: Sequence[Tuple[str, str]]) -> Tuple[securitycenter_service.UpdateSourceRequest, Sequence[Tuple[str, str]]]: - """Pre-rpc interceptor for update_source - - Override in a subclass to manipulate the request or metadata - before they are sent to the SecurityCenter server. - """ - return request, metadata - - def post_update_source(self, response: gcs_source.Source) -> gcs_source.Source: - """Post-rpc interceptor for update_source - - Override in a subclass to manipulate the response - after it is returned by the SecurityCenter server but before - it is returned to user code. - """ - return response - - -@dataclasses.dataclass -class SecurityCenterRestStub: - _session: AuthorizedSession - _host: str - _interceptor: SecurityCenterRestInterceptor - - -class SecurityCenterRestTransport(SecurityCenterTransport): - """REST backend transport for SecurityCenter. - - V1p1Beta1 APIs for Security Center service. - - This class defines the same methods as the primary client, so the - primary client can load the underlying transport implementation - and call it. - - It sends JSON representations of protocol buffers over HTTP/1.1 - - """ - - def __init__(self, *, - host: str = 'securitycenter.googleapis.com', - credentials: Optional[ga_credentials.Credentials] = None, - credentials_file: Optional[str] = None, - scopes: Optional[Sequence[str]] = None, - client_cert_source_for_mtls: Optional[Callable[[ - ], Tuple[bytes, bytes]]] = None, - quota_project_id: Optional[str] = None, - client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, - always_use_jwt_access: Optional[bool] = False, - url_scheme: str = 'https', - interceptor: Optional[SecurityCenterRestInterceptor] = None, - api_audience: Optional[str] = None, - ) -> None: - """Instantiate the transport. - - Args: - host (Optional[str]): - The hostname to connect to. - credentials (Optional[google.auth.credentials.Credentials]): The - authorization credentials to attach to requests. These - credentials identify the application to the service; if none - are specified, the client will attempt to ascertain the - credentials from the environment. - - credentials_file (Optional[str]): A file with credentials that can - be loaded with :func:`google.auth.load_credentials_from_file`. - This argument is ignored if ``channel`` is provided. - scopes (Optional(Sequence[str])): A list of scopes. This argument is - ignored if ``channel`` is provided. - client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client - certificate to configure mutual TLS HTTP channel. It is ignored - if ``channel`` is provided. - quota_project_id (Optional[str]): An optional project to use for billing - and quota. - client_info (google.api_core.gapic_v1.client_info.ClientInfo): - The client info used to send a user-agent string along with - API requests. If ``None``, then default info will be used. - Generally, you only need to set this if you are developing - your own client library. - always_use_jwt_access (Optional[bool]): Whether self signed JWT should - be used for service account credentials. - url_scheme: the protocol scheme for the API endpoint. Normally - "https", but for testing or local servers, - "http" can be specified. - """ - # Run the base constructor - # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. - # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the - # credentials object - maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) - if maybe_url_match is None: - raise ValueError(f"Unexpected hostname structure: {host}") # pragma: NO COVER - - url_match_items = maybe_url_match.groupdict() - - host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host - - super().__init__( - host=host, - credentials=credentials, - client_info=client_info, - always_use_jwt_access=always_use_jwt_access, - api_audience=api_audience - ) - self._session = AuthorizedSession( - self._credentials, default_host=self.DEFAULT_HOST) - self._operations_client: Optional[operations_v1.AbstractOperationsClient] = None - if client_cert_source_for_mtls: - self._session.configure_mtls_channel(client_cert_source_for_mtls) - self._interceptor = interceptor or SecurityCenterRestInterceptor() - self._prep_wrapped_messages(client_info) - - @property - def operations_client(self) -> operations_v1.AbstractOperationsClient: - """Create the client designed to process long-running operations. - - This property caches on the instance; repeated calls return the same - client. - """ - # Only create a new client if we do not already have one. - if self._operations_client is None: - http_options: Dict[str, List[Dict[str, str]]] = { - 'google.longrunning.Operations.CancelOperation': [ - { - 'method': 'post', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}:cancel', - 'body': '*', - }, - ], - 'google.longrunning.Operations.DeleteOperation': [ - { - 'method': 'delete', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.GetOperation': [ - { - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/operations/*}', - }, - ], - 'google.longrunning.Operations.ListOperations': [ - { - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/operations}', - }, - ], - } - - rest_transport = operations_v1.OperationsRestTransport( - host=self._host, - # use the credentials which are saved - credentials=self._credentials, - scopes=self._scopes, - http_options=http_options, - path_prefix="v1p1beta1") - - self._operations_client = operations_v1.AbstractOperationsClient(transport=rest_transport) - - # Return the client from cache. - return self._operations_client - - class _CreateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "findingId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the create finding method over HTTP. - - Args: - request (~.securitycenter_service.CreateFindingRequest): - The request object. Request message for creating a - finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_create_finding(request, metadata) - pb_request = securitycenter_service.CreateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_finding(resp) - return resp - - class _CreateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - "configId" : "", } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the create notification - config method over HTTP. - - Args: - request (~.securitycenter_service.CreateNotificationConfigRequest): - The request object. Request message for creating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_create_notification_config(request, metadata) - pb_request = securitycenter_service.CreateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_notification_config(resp) - return resp - - class _CreateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("CreateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.CreateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the create source method over HTTP. - - Args: - request (~.securitycenter_service.CreateSourceRequest): - The request object. Request message for creating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/sources', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_create_source(request, metadata) - pb_request = securitycenter_service.CreateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_create_source(resp) - return resp - - class _DeleteNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("DeleteNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.DeleteNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ): - r"""Call the delete notification - config method over HTTP. - - Args: - request (~.securitycenter_service.DeleteNotificationConfigRequest): - The request object. Request message for deleting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'delete', - 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_delete_notification_config(request, metadata) - pb_request = securitycenter_service.DeleteNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - class _GetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("GetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.GetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the get iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.GetIamPolicyRequest): - The request object. Request message for ``GetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_iam_policy(resp) - return resp - - class _GetNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("GetNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> notification_config.NotificationConfig: - r"""Call the get notification config method over HTTP. - - Args: - request (~.securitycenter_service.GetNotificationConfigRequest): - The request object. Request message for getting a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/notificationConfigs/*}', - }, - ] - request, metadata = self._interceptor.pre_get_notification_config(request, metadata) - pb_request = securitycenter_service.GetNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = notification_config.NotificationConfig() - pb_resp = notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_notification_config(resp) - return resp - - class _GetOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("GetOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> organization_settings.OrganizationSettings: - r"""Call the get organization settings method over HTTP. - - Args: - request (~.securitycenter_service.GetOrganizationSettingsRequest): - The request object. Request message for getting - organization settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/organizationSettings}', - }, - ] - request, metadata = self._interceptor.pre_get_organization_settings(request, metadata) - pb_request = securitycenter_service.GetOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = organization_settings.OrganizationSettings() - pb_resp = organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_organization_settings(resp) - return resp - - class _GetSource(SecurityCenterRestStub): - def __hash__(self): - return hash("GetSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GetSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> source.Source: - r"""Call the get source method over HTTP. - - Args: - request (~.securitycenter_service.GetSourceRequest): - The request object. Request message for getting a source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{name=organizations/*/sources/*}', - }, - ] - request, metadata = self._interceptor.pre_get_source(request, metadata) - pb_request = securitycenter_service.GetSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = source.Source() - pb_resp = source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_get_source(resp) - return resp - - class _GroupAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupAssetsResponse: - r"""Call the group assets method over HTTP. - - Args: - request (~.securitycenter_service.GroupAssetsRequest): - The request object. Request message for grouping by - assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupAssetsResponse: - Response message for grouping by - assets. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=folders/*}/assets:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=projects/*}/assets:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_assets(request, metadata) - pb_request = securitycenter_service.GroupAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupAssetsResponse() - pb_resp = securitycenter_service.GroupAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_assets(resp) - return resp - - class _GroupFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("GroupFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.GroupFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.GroupFindingsResponse: - r"""Call the group findings method over HTTP. - - Args: - request (~.securitycenter_service.GroupFindingsRequest): - The request object. Request message for grouping by - findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.GroupFindingsResponse: - Response message for group by - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings:group', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings:group', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_group_findings(request, metadata) - pb_request = securitycenter_service.GroupFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.GroupFindingsResponse() - pb_resp = securitycenter_service.GroupFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_group_findings(resp) - return resp - - class _ListAssets(SecurityCenterRestStub): - def __hash__(self): - return hash("ListAssets") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListAssetsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListAssetsResponse: - r"""Call the list assets method over HTTP. - - Args: - request (~.securitycenter_service.ListAssetsRequest): - The request object. Request message for listing assets. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListAssetsResponse: - Response message for listing assets. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*}/assets', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*}/assets', - }, - ] - request, metadata = self._interceptor.pre_list_assets(request, metadata) - pb_request = securitycenter_service.ListAssetsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListAssetsResponse() - pb_resp = securitycenter_service.ListAssetsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_assets(resp) - return resp - - class _ListFindings(SecurityCenterRestStub): - def __hash__(self): - return hash("ListFindings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListFindingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListFindingsResponse: - r"""Call the list findings method over HTTP. - - Args: - request (~.securitycenter_service.ListFindingsRequest): - The request object. Request message for listing findings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListFindingsResponse: - Response message for listing - findings. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*/sources/*}/findings', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*/sources/*}/findings', - }, - ] - request, metadata = self._interceptor.pre_list_findings(request, metadata) - pb_request = securitycenter_service.ListFindingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListFindingsResponse() - pb_resp = securitycenter_service.ListFindingsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_findings(resp) - return resp - - class _ListNotificationConfigs(SecurityCenterRestStub): - def __hash__(self): - return hash("ListNotificationConfigs") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListNotificationConfigsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListNotificationConfigsResponse: - r"""Call the list notification configs method over HTTP. - - Args: - request (~.securitycenter_service.ListNotificationConfigsRequest): - The request object. Request message for listing - notification configs. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListNotificationConfigsResponse: - Response message for listing - notification configs. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/notificationConfigs', - }, - ] - request, metadata = self._interceptor.pre_list_notification_configs(request, metadata) - pb_request = securitycenter_service.ListNotificationConfigsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListNotificationConfigsResponse() - pb_resp = securitycenter_service.ListNotificationConfigsResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_notification_configs(resp) - return resp - - class _ListSources(SecurityCenterRestStub): - def __hash__(self): - return hash("ListSources") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.ListSourcesRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> securitycenter_service.ListSourcesResponse: - r"""Call the list sources method over HTTP. - - Args: - request (~.securitycenter_service.ListSourcesRequest): - The request object. Request message for listing sources. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.securitycenter_service.ListSourcesResponse: - Response message for listing sources. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=organizations/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=folders/*}/sources', - }, -{ - 'method': 'get', - 'uri': '/v1p1beta1/{parent=projects/*}/sources', - }, - ] - request, metadata = self._interceptor.pre_list_sources(request, metadata) - pb_request = securitycenter_service.ListSourcesRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = securitycenter_service.ListSourcesResponse() - pb_resp = securitycenter_service.ListSourcesResponse.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_list_sources(resp) - return resp - - class _RunAssetDiscovery(SecurityCenterRestStub): - def __hash__(self): - return hash("RunAssetDiscovery") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.RunAssetDiscoveryRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> operations_pb2.Operation: - r"""Call the run asset discovery method over HTTP. - - Args: - request (~.securitycenter_service.RunAssetDiscoveryRequest): - The request object. Request message for running asset - discovery for an organization. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.operations_pb2.Operation: - This resource represents a - long-running operation that is the - result of a network API call. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{parent=organizations/*}/assets:runDiscovery', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_run_asset_discovery(request, metadata) - pb_request = securitycenter_service.RunAssetDiscoveryRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = operations_pb2.Operation() - json_format.Parse(response.content, resp, ignore_unknown_fields=True) - resp = self._interceptor.post_run_asset_discovery(resp) - return resp - - class _SetFindingState(SecurityCenterRestStub): - def __hash__(self): - return hash("SetFindingState") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.SetFindingStateRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> finding.Finding: - r"""Call the set finding state method over HTTP. - - Args: - request (~.securitycenter_service.SetFindingStateRequest): - The request object. Request message for updating a - finding's state. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=folders/*/sources/*/findings/*}:setState', - 'body': '*', - }, -{ - 'method': 'post', - 'uri': '/v1p1beta1/{name=projects/*/sources/*/findings/*}:setState', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_finding_state(request, metadata) - pb_request = securitycenter_service.SetFindingStateRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = finding.Finding() - pb_resp = finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_finding_state(resp) - return resp - - class _SetIamPolicy(SecurityCenterRestStub): - def __hash__(self): - return hash("SetIamPolicy") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.SetIamPolicyRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> policy_pb2.Policy: - r"""Call the set iam policy method over HTTP. - - Args: - request (~.iam_policy_pb2.SetIamPolicyRequest): - The request object. Request message for ``SetIamPolicy`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.policy_pb2.Policy: - An Identity and Access Management (IAM) policy, which - specifies access controls for Google Cloud resources. - - A ``Policy`` is a collection of ``bindings``. A - ``binding`` binds one or more ``members``, or - principals, to a single ``role``. Principals can be user - accounts, service accounts, Google groups, and domains - (such as G Suite). A ``role`` is a named list of - permissions; each ``role`` can be an IAM predefined role - or a user-created custom role. - - For some types of Google Cloud resources, a ``binding`` - can also specify a ``condition``, which is a logical - expression that allows access to a resource only if the - expression evaluates to ``true``. A condition can add - constraints based on attributes of the request, the - resource, or both. To learn which resources support - conditions in their IAM policies, see the `IAM - documentation `__. - - **JSON example:** - - :: - - { - "bindings": [ - { - "role": "roles/resourcemanager.organizationAdmin", - "members": [ - "user:mike@example.com", - "group:admins@example.com", - "domain:google.com", - "serviceAccount:my-project-id@appspot.gserviceaccount.com" - ] - }, - { - "role": "roles/resourcemanager.organizationViewer", - "members": [ - "user:eve@example.com" - ], - "condition": { - "title": "expirable access", - "description": "Does not grant access after Sep 2020", - "expression": "request.time < - timestamp('2020-10-01T00:00:00.000Z')", - } - } - ], - "etag": "BwWWja0YfJA=", - "version": 3 - } - - **YAML example:** - - :: - - bindings: - - members: - - user:mike@example.com - - group:admins@example.com - - domain:google.com - - serviceAccount:my-project-id@appspot.gserviceaccount.com - role: roles/resourcemanager.organizationAdmin - - members: - - user:eve@example.com - role: roles/resourcemanager.organizationViewer - condition: - title: expirable access - description: Does not grant access after Sep 2020 - expression: request.time < timestamp('2020-10-01T00:00:00.000Z') - etag: BwWWja0YfJA= - version: 3 - - For a description of IAM and its features, see the `IAM - documentation `__. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = policy_pb2.Policy() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_set_iam_policy(resp) - return resp - - class _TestIamPermissions(SecurityCenterRestStub): - def __hash__(self): - return hash("TestIamPermissions") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: iam_policy_pb2.TestIamPermissionsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> iam_policy_pb2.TestIamPermissionsResponse: - r"""Call the test iam permissions method over HTTP. - - Args: - request (~.iam_policy_pb2.TestIamPermissionsRequest): - The request object. Request message for ``TestIamPermissions`` method. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.iam_policy_pb2.TestIamPermissionsResponse: - Response message for ``TestIamPermissions`` method. - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'post', - 'uri': '/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions', - 'body': '*', - }, - ] - request, metadata = self._interceptor.pre_test_iam_permissions(request, metadata) - pb_request = request - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = iam_policy_pb2.TestIamPermissionsResponse() - pb_resp = resp - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_test_iam_permissions(resp) - return resp - - class _UpdateFinding(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateFinding") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateFindingRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_finding.Finding: - r"""Call the update finding method over HTTP. - - Args: - request (~.securitycenter_service.UpdateFindingRequest): - The request object. Request message for updating or - creating a finding. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_finding.Finding: - Security Command Center finding. - A finding is a record of assessment data - (security, risk, health or privacy) - ingested into Security Command Center - for presentation, notification, - analysis, policy testing, and - enforcement. For example, an XSS - vulnerability in an App Engine - application is a finding. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=folders/*/sources/*/findings/*}', - 'body': 'finding', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{finding.name=projects/*/sources/*/findings/*}', - 'body': 'finding', - }, - ] - request, metadata = self._interceptor.pre_update_finding(request, metadata) - pb_request = securitycenter_service.UpdateFindingRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_finding.Finding() - pb_resp = gcs_finding.Finding.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_finding(resp) - return resp - - class _UpdateNotificationConfig(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateNotificationConfig") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateNotificationConfigRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_notification_config.NotificationConfig: - r"""Call the update notification - config method over HTTP. - - Args: - request (~.securitycenter_service.UpdateNotificationConfigRequest): - The request object. Request message for updating a - notification config. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_notification_config.NotificationConfig: - Security Command Center notification - configs. - A notification config is a Security - Command Center resource that contains - the configuration to send notifications - for create/update events of findings, - assets and etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}', - 'body': 'notification_config', - }, - ] - request, metadata = self._interceptor.pre_update_notification_config(request, metadata) - pb_request = securitycenter_service.UpdateNotificationConfigRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_notification_config.NotificationConfig() - pb_resp = gcs_notification_config.NotificationConfig.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_notification_config(resp) - return resp - - class _UpdateOrganizationSettings(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateOrganizationSettings") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateOrganizationSettingsRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_organization_settings.OrganizationSettings: - r"""Call the update organization - settings method over HTTP. - - Args: - request (~.securitycenter_service.UpdateOrganizationSettingsRequest): - The request object. Request message for updating an - organization's settings. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_organization_settings.OrganizationSettings: - User specified settings that are - attached to the Security Command Center - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}', - 'body': 'organization_settings', - }, - ] - request, metadata = self._interceptor.pre_update_organization_settings(request, metadata) - pb_request = securitycenter_service.UpdateOrganizationSettingsRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_organization_settings.OrganizationSettings() - pb_resp = gcs_organization_settings.OrganizationSettings.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_organization_settings(resp) - return resp - - class _UpdateSecurityMarks(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSecurityMarks") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSecurityMarksRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_security_marks.SecurityMarks: - r"""Call the update security marks method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSecurityMarksRequest): - The request object. Request message for updating a - SecurityMarks resource. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_security_marks.SecurityMarks: - User specified security marks that - are attached to the parent Security - Command Center resource. Security marks - are scoped within a Security Command - Center organization -- they can be - modified and viewed by all users who - have proper permissions on the - organization. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=folders/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=projects/*/assets/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=organizations/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=folders/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, -{ - 'method': 'patch', - 'uri': '/v1p1beta1/{security_marks.name=projects/*/sources/*/findings/*/securityMarks}', - 'body': 'security_marks', - }, - ] - request, metadata = self._interceptor.pre_update_security_marks(request, metadata) - pb_request = securitycenter_service.UpdateSecurityMarksRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_security_marks.SecurityMarks() - pb_resp = gcs_security_marks.SecurityMarks.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_security_marks(resp) - return resp - - class _UpdateSource(SecurityCenterRestStub): - def __hash__(self): - return hash("UpdateSource") - - __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, Any] = { - } - - @classmethod - def _get_unset_required_fields(cls, message_dict): - return {k: v for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() if k not in message_dict} - - def __call__(self, - request: securitycenter_service.UpdateSourceRequest, *, - retry: OptionalRetry=gapic_v1.method.DEFAULT, - timeout: Optional[float]=None, - metadata: Sequence[Tuple[str, str]]=(), - ) -> gcs_source.Source: - r"""Call the update source method over HTTP. - - Args: - request (~.securitycenter_service.UpdateSourceRequest): - The request object. Request message for updating a - source. - retry (google.api_core.retry.Retry): Designation of what errors, if any, - should be retried. - timeout (float): The timeout for this request. - metadata (Sequence[Tuple[str, str]]): Strings which should be - sent along with the request as metadata. - - Returns: - ~.gcs_source.Source: - Security Command Center finding - source. A finding source is an entity or - a mechanism that can produce a finding. - A source is like a container of findings - that come from the same scanner, logger, - monitor, etc. - - """ - - http_options: List[Dict[str, str]] = [{ - 'method': 'patch', - 'uri': '/v1p1beta1/{source.name=organizations/*/sources/*}', - 'body': 'source', - }, - ] - request, metadata = self._interceptor.pre_update_source(request, metadata) - pb_request = securitycenter_service.UpdateSourceRequest.pb(request) - transcoded_request = path_template.transcode(http_options, pb_request) - - # Jsonify the request body - - body = json_format.MessageToJson( - transcoded_request['body'], - including_default_value_fields=False, - use_integers_for_enums=True - ) - uri = transcoded_request['uri'] - method = transcoded_request['method'] - - # Jsonify the query params - query_params = json.loads(json_format.MessageToJson( - transcoded_request['query_params'], - including_default_value_fields=False, - use_integers_for_enums=True, - )) - query_params.update(self._get_unset_required_fields(query_params)) - - query_params["$alt"] = "json;enum-encoding=int" - - # Send the request - headers = dict(metadata) - headers['Content-Type'] = 'application/json' - response = getattr(self._session, method)( - "{host}{uri}".format(host=self._host, uri=uri), - timeout=timeout, - headers=headers, - params=rest_helpers.flatten_query_params(query_params, strict=True), - data=body, - ) - - # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception - # subclass. - if response.status_code >= 400: - raise core_exceptions.from_http_response(response) - - # Return the response - resp = gcs_source.Source() - pb_resp = gcs_source.Source.pb(resp) - - json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) - resp = self._interceptor.post_update_source(resp) - return resp - - @property - def create_finding(self) -> Callable[ - [securitycenter_service.CreateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_notification_config(self) -> Callable[ - [securitycenter_service.CreateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def create_source(self) -> Callable[ - [securitycenter_service.CreateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._CreateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def delete_notification_config(self) -> Callable[ - [securitycenter_service.DeleteNotificationConfigRequest], - empty_pb2.Empty]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._DeleteNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_iam_policy(self) -> Callable[ - [iam_policy_pb2.GetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_notification_config(self) -> Callable[ - [securitycenter_service.GetNotificationConfigRequest], - notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_organization_settings(self) -> Callable[ - [securitycenter_service.GetOrganizationSettingsRequest], - organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def get_source(self) -> Callable[ - [securitycenter_service.GetSourceRequest], - source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GetSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_assets(self) -> Callable[ - [securitycenter_service.GroupAssetsRequest], - securitycenter_service.GroupAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def group_findings(self) -> Callable[ - [securitycenter_service.GroupFindingsRequest], - securitycenter_service.GroupFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._GroupFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_assets(self) -> Callable[ - [securitycenter_service.ListAssetsRequest], - securitycenter_service.ListAssetsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListAssets(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_findings(self) -> Callable[ - [securitycenter_service.ListFindingsRequest], - securitycenter_service.ListFindingsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListFindings(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_notification_configs(self) -> Callable[ - [securitycenter_service.ListNotificationConfigsRequest], - securitycenter_service.ListNotificationConfigsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListNotificationConfigs(self._session, self._host, self._interceptor) # type: ignore - - @property - def list_sources(self) -> Callable[ - [securitycenter_service.ListSourcesRequest], - securitycenter_service.ListSourcesResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._ListSources(self._session, self._host, self._interceptor) # type: ignore - - @property - def run_asset_discovery(self) -> Callable[ - [securitycenter_service.RunAssetDiscoveryRequest], - operations_pb2.Operation]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._RunAssetDiscovery(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_finding_state(self) -> Callable[ - [securitycenter_service.SetFindingStateRequest], - finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetFindingState(self._session, self._host, self._interceptor) # type: ignore - - @property - def set_iam_policy(self) -> Callable[ - [iam_policy_pb2.SetIamPolicyRequest], - policy_pb2.Policy]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore - - @property - def test_iam_permissions(self) -> Callable[ - [iam_policy_pb2.TestIamPermissionsRequest], - iam_policy_pb2.TestIamPermissionsResponse]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._TestIamPermissions(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_finding(self) -> Callable[ - [securitycenter_service.UpdateFindingRequest], - gcs_finding.Finding]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateFinding(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_notification_config(self) -> Callable[ - [securitycenter_service.UpdateNotificationConfigRequest], - gcs_notification_config.NotificationConfig]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateNotificationConfig(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_organization_settings(self) -> Callable[ - [securitycenter_service.UpdateOrganizationSettingsRequest], - gcs_organization_settings.OrganizationSettings]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateOrganizationSettings(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_security_marks(self) -> Callable[ - [securitycenter_service.UpdateSecurityMarksRequest], - gcs_security_marks.SecurityMarks]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSecurityMarks(self._session, self._host, self._interceptor) # type: ignore - - @property - def update_source(self) -> Callable[ - [securitycenter_service.UpdateSourceRequest], - gcs_source.Source]: - # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. - # In C++ this would require a dynamic_cast - return self._UpdateSource(self._session, self._host, self._interceptor) # type: ignore - - @property - def kind(self) -> str: - return "rest" - - def close(self): - self._session.close() - - -__all__=( - 'SecurityCenterRestTransport', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py deleted file mode 100644 index ec6cbc99..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/__init__.py +++ /dev/null @@ -1,114 +0,0 @@ -# -*- 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. -# -from .asset import ( - Asset, -) -from .finding import ( - Finding, -) -from .folder import ( - Folder, -) -from .notification_config import ( - NotificationConfig, -) -from .notification_message import ( - NotificationMessage, -) -from .organization_settings import ( - OrganizationSettings, -) -from .resource import ( - Resource, -) -from .run_asset_discovery_response import ( - RunAssetDiscoveryResponse, -) -from .security_marks import ( - SecurityMarks, -) -from .securitycenter_service import ( - CreateFindingRequest, - CreateNotificationConfigRequest, - CreateSourceRequest, - DeleteNotificationConfigRequest, - GetNotificationConfigRequest, - GetOrganizationSettingsRequest, - GetSourceRequest, - GroupAssetsRequest, - GroupAssetsResponse, - GroupFindingsRequest, - GroupFindingsResponse, - GroupResult, - ListAssetsRequest, - ListAssetsResponse, - ListFindingsRequest, - ListFindingsResponse, - ListNotificationConfigsRequest, - ListNotificationConfigsResponse, - ListSourcesRequest, - ListSourcesResponse, - RunAssetDiscoveryRequest, - SetFindingStateRequest, - UpdateFindingRequest, - UpdateNotificationConfigRequest, - UpdateOrganizationSettingsRequest, - UpdateSecurityMarksRequest, - UpdateSourceRequest, -) -from .source import ( - Source, -) - -__all__ = ( - 'Asset', - 'Finding', - 'Folder', - 'NotificationConfig', - 'NotificationMessage', - 'OrganizationSettings', - 'Resource', - 'RunAssetDiscoveryResponse', - 'SecurityMarks', - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'RunAssetDiscoveryRequest', - 'SetFindingStateRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSecurityMarksRequest', - 'UpdateSourceRequest', - 'Source', -) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py deleted file mode 100644 index d61c427b..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/asset.py +++ /dev/null @@ -1,227 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import folder -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Asset', - }, -) - - -class Asset(proto.Message): - r"""Security Command Center representation of a Google Cloud - resource. - - The Asset is a Security Command Center resource that captures - information about a single Google Cloud resource. All - modifications to an Asset are only within the context of - Security Command Center and don't affect the referenced Google - Cloud resource. - - Attributes: - name (str): - The relative resource name of this asset. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/assets/{asset_id}". - security_center_properties (google.cloud.securitycenter_v1p1beta1.types.Asset.SecurityCenterProperties): - Security Command Center managed properties. - These properties are managed by Security Command - Center and cannot be modified by the user. - resource_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Resource managed properties. These properties - are managed and defined by the Google Cloud - resource and cannot be modified by the user. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - User specified security marks. These marks - are entirely managed by the user and come from - the SecurityMarks resource that belongs to the - asset. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was created in - Security Command Center. - update_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the asset was last updated - or added in Cloud SCC. - iam_policy (google.cloud.securitycenter_v1p1beta1.types.Asset.IamPolicy): - Cloud IAM Policy information associated with - the Google Cloud resource described by the - Security Command Center asset. This information - is managed and defined by the Google Cloud - resource and cannot be modified by the user. - canonical_name (str): - The canonical name of the resource. It's either - "organizations/{organization_id}/assets/{asset_id}", - "folders/{folder_id}/assets/{asset_id}" or - "projects/{project_number}/assets/{asset_id}", depending on - the closest CRM ancestor of the resource. - """ - - class SecurityCenterProperties(proto.Message): - r"""Security Command Center managed properties. These properties - are managed by Security Command Center and cannot be modified by - the user. - - Attributes: - resource_name (str): - The full resource name of the Google Cloud resource this - asset represents. This field is immutable after create time. - See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_type (str): - The type of the Google Cloud resource. - Examples include: APPLICATION, PROJECT, and - ORGANIZATION. This is a case insensitive field - defined by Security Command Center and/or the - producer of the resource and is immutable after - create time. - resource_parent (str): - The full resource name of the immediate parent of the - resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_project (str): - The full resource name of the project the resource belongs - to. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_owners (MutableSequence[str]): - Owners of the Google Cloud resource. - resource_display_name (str): - The user defined display name for this - resource. - resource_parent_display_name (str): - The user defined display name for the parent - of this resource. - resource_project_display_name (str): - The user defined display name for the project - of this resource. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - resource_name: str = proto.Field( - proto.STRING, - number=1, - ) - resource_type: str = proto.Field( - proto.STRING, - number=2, - ) - resource_parent: str = proto.Field( - proto.STRING, - number=3, - ) - resource_project: str = proto.Field( - proto.STRING, - number=4, - ) - resource_owners: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=5, - ) - resource_display_name: str = proto.Field( - proto.STRING, - number=6, - ) - resource_parent_display_name: str = proto.Field( - proto.STRING, - number=7, - ) - resource_project_display_name: str = proto.Field( - proto.STRING, - number=8, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - class IamPolicy(proto.Message): - r"""Cloud IAM Policy information associated with the Google Cloud - resource described by the Security Command Center asset. This - information is managed and defined by the Google Cloud resource - and cannot be modified by the user. - - Attributes: - policy_blob (str): - The JSON representation of the Policy - associated with the asset. See - https://cloud.google.com/iam/docs/reference/rest/v1/Policy - for format details. - """ - - policy_blob: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - security_center_properties: SecurityCenterProperties = proto.Field( - proto.MESSAGE, - number=2, - message=SecurityCenterProperties, - ) - resource_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - update_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - iam_policy: IamPolicy = proto.Field( - proto.MESSAGE, - number=11, - message=IamPolicy, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=13, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py deleted file mode 100644 index e74ce6ab..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/finding.py +++ /dev/null @@ -1,208 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Finding', - }, -) - - -class Finding(proto.Message): - r"""Security Command Center finding. - A finding is a record of assessment data (security, risk, health - or privacy) ingested into Security Command Center for - presentation, notification, analysis, policy testing, and - enforcement. For example, an XSS vulnerability in an App Engine - application is a finding. - - Attributes: - name (str): - The relative resource name of this finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}". - parent (str): - The relative resource name of the source the finding belongs - to. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - This field is immutable after creation time. For example: - "organizations/{organization_id}/sources/{source_id}". - resource_name (str): - For findings on Google Cloud resources, the full resource - name of the Google Cloud resource this finding is for. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - When the finding is for a non-Google Cloud resource, the - resourceName can be a customer or partner defined string. - This field is immutable after creation time. - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - The state of the finding. - category (str): - The additional taxonomy group within findings from a given - source. This field is immutable after creation time. - Example: "XSS_FLASH_INJECTION". - external_uri (str): - The URI that, if available, points to a web - page outside of Security Command Center where - additional information about the finding can be - found. This field is guaranteed to be either - empty or a well formed URL. - source_properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Source specific properties. These properties are managed by - the source that writes the finding. The key names in the - source_properties map must be between 1 and 255 characters, - and must start with a letter and contain alphanumeric - characters or underscores only. - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Output only. User specified security marks. - These marks are entirely managed by the user and - come from the SecurityMarks resource that - belongs to the finding. - event_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the event took place, or - when an update to the finding occurred. For - example, if the finding represents an open - firewall it would capture the time the detector - believes the firewall became open. The accuracy - is determined by the detector. If the finding - were to be resolved afterward, this time would - reflect when the finding was resolved. Must not - be set to a value greater than the current - timestamp. - create_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the finding was created in - Security Command Center. - severity (google.cloud.securitycenter_v1p1beta1.types.Finding.Severity): - The severity of the finding. This field is - managed by the source that writes the finding. - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}", - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}" - or - "projects/{project_number}/sources/{source_id}/findings/{finding_id}", - depending on the closest CRM ancestor of the resource - associated with the finding. - """ - class State(proto.Enum): - r"""The state of the finding. - - Values: - STATE_UNSPECIFIED (0): - Unspecified state. - ACTIVE (1): - The finding requires attention and has not - been addressed yet. - INACTIVE (2): - The finding has been fixed, triaged as a - non-issue or otherwise addressed and is no - longer active. - """ - STATE_UNSPECIFIED = 0 - ACTIVE = 1 - INACTIVE = 2 - - class Severity(proto.Enum): - r"""The severity of the finding. This field is managed by the - source that writes the finding. - - Values: - SEVERITY_UNSPECIFIED (0): - No severity specified. The default value. - CRITICAL (1): - Critical severity. - HIGH (2): - High severity. - MEDIUM (3): - Medium severity. - LOW (4): - Low severity. - """ - SEVERITY_UNSPECIFIED = 0 - CRITICAL = 1 - HIGH = 2 - MEDIUM = 3 - LOW = 4 - - name: str = proto.Field( - proto.STRING, - number=1, - ) - parent: str = proto.Field( - proto.STRING, - number=2, - ) - resource_name: str = proto.Field( - proto.STRING, - number=3, - ) - state: State = proto.Field( - proto.ENUM, - number=4, - enum=State, - ) - category: str = proto.Field( - proto.STRING, - number=5, - ) - external_uri: str = proto.Field( - proto.STRING, - number=6, - ) - source_properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=7, - message=struct_pb2.Value, - ) - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=8, - message=gcs_security_marks.SecurityMarks, - ) - event_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=9, - message=timestamp_pb2.Timestamp, - ) - create_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=10, - message=timestamp_pb2.Timestamp, - ) - severity: Severity = proto.Field( - proto.ENUM, - number=13, - enum=Severity, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py deleted file mode 100644 index 81667385..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/folder.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Folder', - }, -) - - -class Folder(proto.Message): - r"""Message that contains the resource name and display name of a - folder resource. - - Attributes: - resource_folder (str): - Full resource name of this folder. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - resource_folder_display_name (str): - The user defined display name for this - folder. - """ - - resource_folder: str = proto.Field( - proto.STRING, - number=1, - ) - resource_folder_display_name: str = proto.Field( - proto.STRING, - number=2, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py deleted file mode 100644 index a4e12bfe..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_config.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'NotificationConfig', - }, -) - - -class NotificationConfig(proto.Message): - r"""Security Command Center notification configs. - A notification config is a Security Command Center resource that - contains the configuration to send notifications for - create/update events of findings, assets and etc. - - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - name (str): - The relative resource name of this notification config. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/notificationConfigs/notify_public_bucket". - description (str): - The description of the notification config - (max of 1024 characters). - event_type (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.EventType): - The type of events the config is for, e.g. - FINDING. - pubsub_topic (str): - The Pub/Sub topic to send notifications to. Its format is - "projects/[project_id]/topics/[topic]". - service_account (str): - Output only. The service account that needs - "pubsub.topics.publish" permission to publish to - the Pub/Sub topic. - streaming_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig.StreamingConfig): - The config for triggering streaming-based - notifications. - - This field is a member of `oneof`_ ``notify_config``. - """ - class EventType(proto.Enum): - r"""The type of events. - - Values: - EVENT_TYPE_UNSPECIFIED (0): - Unspecified event type. - FINDING (1): - Events for findings. - """ - EVENT_TYPE_UNSPECIFIED = 0 - FINDING = 1 - - class StreamingConfig(proto.Message): - r"""The config for streaming-based notifications, which send each - event as soon as it is detected. - - Attributes: - filter (str): - Expression that defines the filter to apply across - create/update events of assets or findings as specified by - the event type. The expression is a list of zero or more - restrictions combined via logical operators ``AND`` and - ``OR``. Parentheses are supported, and ``OR`` has higher - precedence than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the - corresponding resource. - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - """ - - filter: str = proto.Field( - proto.STRING, - number=1, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - description: str = proto.Field( - proto.STRING, - number=2, - ) - event_type: EventType = proto.Field( - proto.ENUM, - number=3, - enum=EventType, - ) - pubsub_topic: str = proto.Field( - proto.STRING, - number=4, - ) - service_account: str = proto.Field( - proto.STRING, - number=5, - ) - streaming_config: StreamingConfig = proto.Field( - proto.MESSAGE, - number=6, - oneof='notify_config', - message=StreamingConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py deleted file mode 100644 index a4834ac4..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/notification_message.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import resource as gcs_resource - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'NotificationMessage', - }, -) - - -class NotificationMessage(proto.Message): - r"""Security Command Center's Notification - - .. _oneof: https://proto-plus-python.readthedocs.io/en/stable/fields.html#oneofs-mutually-exclusive-fields - - Attributes: - notification_config_name (str): - Name of the notification config that - generated current notification. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - If it's a Finding based notification config, - this field will be populated. - - This field is a member of `oneof`_ ``event``. - resource (google.cloud.securitycenter_v1p1beta1.types.Resource): - The Cloud resource tied to the notification. - """ - - notification_config_name: str = proto.Field( - proto.STRING, - number=1, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=2, - oneof='event', - message=gcs_finding.Finding, - ) - resource: gcs_resource.Resource = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_resource.Resource, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py deleted file mode 100644 index 0ef9a722..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/organization_settings.py +++ /dev/null @@ -1,123 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'OrganizationSettings', - }, -) - - -class OrganizationSettings(proto.Message): - r"""User specified settings that are attached to the Security - Command Center organization. - - Attributes: - name (str): - The relative resource name of the settings. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/organizationSettings". - enable_asset_discovery (bool): - A flag that indicates if Asset Discovery should be enabled. - If the flag is set to ``true``, then discovery of assets - will occur. If it is set to \`false, all historical assets - will remain, but discovery of future assets will not occur. - asset_discovery_config (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig): - The configuration used for Asset Discovery - runs. - """ - - class AssetDiscoveryConfig(proto.Message): - r"""The configuration used for Asset Discovery runs. - - Attributes: - project_ids (MutableSequence[str]): - The project ids to use for filtering asset - discovery. - inclusion_mode (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings.AssetDiscoveryConfig.InclusionMode): - The mode to use for filtering asset - discovery. - folder_ids (MutableSequence[str]): - The folder ids to use for filtering asset - discovery. It consists of only digits, e.g., - 756619654966. - """ - class InclusionMode(proto.Enum): - r"""The mode of inclusion when running Asset Discovery. Asset discovery - can be limited by explicitly identifying projects to be included or - excluded. If INCLUDE_ONLY is set, then only those projects within - the organization and their children are discovered during asset - discovery. If EXCLUDE is set, then projects that don't match those - projects are discovered during asset discovery. If neither are set, - then all projects within the organization are discovered during - asset discovery. - - Values: - INCLUSION_MODE_UNSPECIFIED (0): - Unspecified. Setting the mode with this value - will disable inclusion/exclusion filtering for - Asset Discovery. - INCLUDE_ONLY (1): - Asset Discovery will capture only the - resources within the projects specified. All - other resources will be ignored. - EXCLUDE (2): - Asset Discovery will ignore all resources - under the projects specified. All other - resources will be retrieved. - """ - INCLUSION_MODE_UNSPECIFIED = 0 - INCLUDE_ONLY = 1 - EXCLUDE = 2 - - project_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=1, - ) - inclusion_mode: 'OrganizationSettings.AssetDiscoveryConfig.InclusionMode' = proto.Field( - proto.ENUM, - number=2, - enum='OrganizationSettings.AssetDiscoveryConfig.InclusionMode', - ) - folder_ids: MutableSequence[str] = proto.RepeatedField( - proto.STRING, - number=3, - ) - - name: str = proto.Field( - proto.STRING, - number=1, - ) - enable_asset_discovery: bool = proto.Field( - proto.BOOL, - number=2, - ) - asset_discovery_config: AssetDiscoveryConfig = proto.Field( - proto.MESSAGE, - number=3, - message=AssetDiscoveryConfig, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py deleted file mode 100644 index 907f895c..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/resource.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import folder - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Resource', - }, -) - - -class Resource(proto.Message): - r"""Information related to the Google Cloud resource. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - project (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The human readable name of project that the - resource belongs to. - parent (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Output only. Contains a Folder message for - each folder in the assets ancestry. The first - folder is the deepest nested folder, and the - last folder is the folder directly under the - Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - project: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=7, - message=folder.Folder, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py deleted file mode 100644 index e1eb6547..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/run_asset_discovery_response.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.protobuf import duration_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'RunAssetDiscoveryResponse', - }, -) - - -class RunAssetDiscoveryResponse(proto.Message): - r"""Response of asset discovery run - - Attributes: - state (google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryResponse.State): - The state of an asset discovery run. - duration (google.protobuf.duration_pb2.Duration): - The duration between asset discovery run - start and end - """ - class State(proto.Enum): - r"""The state of an asset discovery run. - - Values: - STATE_UNSPECIFIED (0): - Asset discovery run state was unspecified. - COMPLETED (1): - Asset discovery run completed successfully. - SUPERSEDED (2): - Asset discovery run was cancelled with tasks - still pending, as another run for the same - organization was started with a higher priority. - TERMINATED (3): - Asset discovery run was killed and - terminated. - """ - STATE_UNSPECIFIED = 0 - COMPLETED = 1 - SUPERSEDED = 2 - TERMINATED = 3 - - state: State = proto.Field( - proto.ENUM, - number=1, - enum=State, - ) - duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=2, - message=duration_pb2.Duration, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py deleted file mode 100644 index de35f3c7..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/security_marks.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'SecurityMarks', - }, -) - - -class SecurityMarks(proto.Message): - r"""User specified security marks that are attached to the parent - Security Command Center resource. Security marks are scoped - within a Security Command Center organization -- they can be - modified and viewed by all users who have proper permissions on - the organization. - - Attributes: - name (str): - The relative resource name of the SecurityMarks. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks". - marks (MutableMapping[str, str]): - Mutable user specified security marks belonging to the - parent resource. Constraints are as follows: - - - Keys and values are treated as case insensitive - - Keys must be between 1 - 256 characters (inclusive) - - Keys must be letters, numbers, underscores, or dashes - - Values have leading and trailing whitespace trimmed, - remaining characters must be between 1 - 4096 characters - (inclusive) - canonical_name (str): - The canonical name of the marks. Examples: - "organizations/{organization_id}/assets/{asset_id}/securityMarks" - "folders/{folder_id}/assets/{asset_id}/securityMarks" - "projects/{project_number}/assets/{asset_id}/securityMarks" - "organizations/{organization_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "folders/{folder_id}/sources/{source_id}/findings/{finding_id}/securityMarks" - "projects/{project_number}/sources/{source_id}/findings/{finding_id}/securityMarks". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - marks: MutableMapping[str, str] = proto.MapField( - proto.STRING, - proto.STRING, - number=2, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=3, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py deleted file mode 100644 index 21eb74c9..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/securitycenter_service.py +++ /dev/null @@ -1,1641 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - -from google.cloud.securitycenter_v1p1beta1.types import asset as gcs_asset -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import folder -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'CreateFindingRequest', - 'CreateNotificationConfigRequest', - 'CreateSourceRequest', - 'DeleteNotificationConfigRequest', - 'GetNotificationConfigRequest', - 'GetOrganizationSettingsRequest', - 'GetSourceRequest', - 'GroupAssetsRequest', - 'GroupAssetsResponse', - 'GroupFindingsRequest', - 'GroupFindingsResponse', - 'GroupResult', - 'ListNotificationConfigsRequest', - 'ListNotificationConfigsResponse', - 'ListSourcesRequest', - 'ListSourcesResponse', - 'ListAssetsRequest', - 'ListAssetsResponse', - 'ListFindingsRequest', - 'ListFindingsResponse', - 'SetFindingStateRequest', - 'RunAssetDiscoveryRequest', - 'UpdateFindingRequest', - 'UpdateNotificationConfigRequest', - 'UpdateOrganizationSettingsRequest', - 'UpdateSourceRequest', - 'UpdateSecurityMarksRequest', - }, -) - - -class CreateFindingRequest(proto.Message): - r"""Request message for creating a finding. - - Attributes: - parent (str): - Required. Resource name of the new finding's parent. Its - format should be - "organizations/[organization_id]/sources/[source_id]". - finding_id (str): - Required. Unique identifier provided by the - client within the parent scope. - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The Finding being created. The name and - security_marks will be ignored as they are both output only - fields on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - finding_id: str = proto.Field( - proto.STRING, - number=2, - ) - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_finding.Finding, - ) - - -class CreateNotificationConfigRequest(proto.Message): - r"""Request message for creating a notification config. - - Attributes: - parent (str): - Required. Resource name of the new notification config's - parent. Its format is "organizations/[organization_id]". - config_id (str): - Required. Unique identifier provided by the - client within the parent scope. It must be - between 1 and 128 characters, and contains - alphanumeric characters, underscores or hyphens - only. - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config being - created. The name and the service account will - be ignored as they are both output only fields - on this resource. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - config_id: str = proto.Field( - proto.STRING, - number=2, - ) - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=3, - message=gcs_notification_config.NotificationConfig, - ) - - -class CreateSourceRequest(proto.Message): - r"""Request message for creating a source. - - Attributes: - parent (str): - Required. Resource name of the new source's parent. Its - format should be "organizations/[organization_id]". - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The Source being created, only the display_name - and description will be used. All other fields will be - ignored. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=2, - message=gcs_source.Source, - ) - - -class DeleteNotificationConfigRequest(proto.Message): - r"""Request message for deleting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to delete. Its - format is - "organizations/[organization_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetNotificationConfigRequest(proto.Message): - r"""Request message for getting a notification config. - - Attributes: - name (str): - Required. Name of the notification config to get. Its format - is - "organizations/[organization_id]/notificationConfigs/[config_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetOrganizationSettingsRequest(proto.Message): - r"""Request message for getting organization settings. - - Attributes: - name (str): - Required. Name of the organization to get organization - settings for. Its format is - "organizations/[organization_id]/organizationSettings". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GetSourceRequest(proto.Message): - r"""Request message for getting a source. - - Attributes: - name (str): - Required. Relative resource name of the source. Its format - is "organizations/[organization_id]/source/[source_id]". - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - - -class GroupAssetsRequest(proto.Message): - r"""Request message for grouping by assets. - - Attributes: - parent (str): - Required. Name of the organization to groupBy. Its format is - "organizations/[organization_id], folders/[folder_id], or - projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_name_display_name: - ``=``, ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping. The string value should follow SQL syntax: - comma separated list of fields. For example: - "security_center_properties.resource_project,security_center_properties.project". - - The following fields are supported when compare_duration is - not set: - - - security_center_properties.resource_project - - security_center_properties.resource_project_display_name - - security_center_properties.resource_type - - security_center_properties.resource_parent - - security_center_properties.resource_parent_display_name - - The following fields are supported when compare_duration is - set: - - - security_center_properties.resource_type - - security_center_properties.resource_project_display_name - - security_center_properties.resource_parent_display_name - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" property is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at reference_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at - reference_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and reference_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - page_token (str): - The value returned by the last ``GroupAssetsResponse``; - indicates that this is a continuation of a prior - ``GroupAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=4, - message=duration_pb2.Duration, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=5, - message=timestamp_pb2.Timestamp, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupAssetsResponse(proto.Message): - r"""Response message for grouping by assets. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupFindingsRequest(proto.Message): - r"""Request message for grouping by findings. - - Attributes: - parent (str): - Required. Name of the source to groupBy. Its format is - "organizations/[organization_id]/sources/[source_id]", - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]. To groupBy across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/-, or - projects/{project_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - - severity: ``=``, ``:`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - - security_marks.marks: ``=``, ``:`` - - - source_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - group_by (str): - Required. Expression that defines what assets fields to use - for grouping (including ``state_change``). The string value - should follow SQL syntax: comma separated list of fields. - For example: "parent,resource_name". - - The following fields are supported: - - - resource_name - - category - - state - - parent - - severity - - The following fields are supported when compare_duration is - set: - - - state_change - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the GroupResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - - If this field is set then ``state_change`` must be a - specified field in ``group_by``. - page_token (str): - The value returned by the last ``GroupFindingsResponse``; - indicates that this is a continuation of a prior - ``GroupFindings`` call, and that the system should return - the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - group_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - page_token: str = proto.Field( - proto.STRING, - number=7, - ) - page_size: int = proto.Field( - proto.INT32, - number=8, - ) - - -class GroupFindingsResponse(proto.Message): - r"""Response message for group by findings. - - Attributes: - group_by_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.GroupResult]): - Group results. There exists an element for - each existing unique combination of - property/values. The element contains a count - for the number of times those specific - property/values appear. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the groupBy request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of results matching the - query. - """ - - @property - def raw_page(self): - return self - - group_by_results: MutableSequence['GroupResult'] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message='GroupResult', - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class GroupResult(proto.Message): - r"""Result containing the properties and count of a groupBy - request. - - Attributes: - properties (MutableMapping[str, google.protobuf.struct_pb2.Value]): - Properties matching the groupBy fields in the - request. - count (int): - Total count of resources for the given - properties. - """ - - properties: MutableMapping[str, struct_pb2.Value] = proto.MapField( - proto.STRING, - proto.MESSAGE, - number=1, - message=struct_pb2.Value, - ) - count: int = proto.Field( - proto.INT64, - number=2, - ) - - -class ListNotificationConfigsRequest(proto.Message): - r"""Request message for listing notification configs. - - Attributes: - parent (str): - Required. Name of the organization to list notification - configs. Its format is "organizations/[organization_id]". - page_token (str): - The value returned by the last - ``ListNotificationConfigsResponse``; indicates that this is - a continuation of a prior ``ListNotificationConfigs`` call, - and that the system should return the next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=3, - ) - - -class ListNotificationConfigsResponse(proto.Message): - r"""Response message for listing notification configs. - - Attributes: - notification_configs (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.NotificationConfig]): - Notification configs belonging to the - requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - notification_configs: MutableSequence[gcs_notification_config.NotificationConfig] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListSourcesRequest(proto.Message): - r"""Request message for listing sources. - - Attributes: - parent (str): - Required. Resource name of the parent of sources to list. - Its format should be "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - page_token (str): - The value returned by the last ``ListSourcesResponse``; - indicates that this is a continuation of a prior - ``ListSources`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - page_token: str = proto.Field( - proto.STRING, - number=2, - ) - page_size: int = proto.Field( - proto.INT32, - number=7, - ) - - -class ListSourcesResponse(proto.Message): - r"""Response message for listing sources. - - Attributes: - sources (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Source]): - Sources belonging to the requested parent. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - """ - - @property - def raw_page(self): - return self - - sources: MutableSequence[gcs_source.Source] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=2, - ) - - -class ListAssetsRequest(proto.Message): - r"""Request message for listing assets. - - Attributes: - parent (str): - Required. Name of the organization assets should belong to. - Its format is "organizations/[organization_id], - folders/[folder_id], or projects/[project_id]". - filter (str): - Expression that defines the filter to apply across assets. - The expression is a list of zero or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. The fields map to those defined in the Asset - resource. Examples include: - - - name - - security_center_properties.resource_name - - resource_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following are the allowed field and operator - combinations: - - - name: ``=`` - - - update_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``update_time = "2019-06-10T16:07:18-07:00"`` - ``update_time = 1560208038000`` - - - create_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``create_time = "2019-06-10T16:07:18-07:00"`` - ``create_time = 1560208038000`` - - - iam_policy.policy_blob: ``=``, ``:`` - - - resource_properties: ``=``, ``:``, ``>``, ``<``, ``>=``, - ``<=`` - - - security_marks.marks: ``=``, ``:`` - - - security_center_properties.resource_name: ``=``, ``:`` - - - security_center_properties.resource_display_name: ``=``, - ``:`` - - - security_center_properties.resource_type: ``=``, ``:`` - - - security_center_properties.resource_parent: ``=``, ``:`` - - - security_center_properties.resource_parent_display_name: - ``=``, ``:`` - - - security_center_properties.resource_project: ``=``, ``:`` - - - security_center_properties.resource_project_display_name: - ``=``, ``:`` - - - security_center_properties.resource_owners: ``=``, ``:`` - - For example, ``resource_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``resource_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-resource_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,resource_properties.a_property". - Redundant space characters in the syntax are insignificant. - "name desc,resource_properties.a_property" and " name desc , - resource_properties.a_property " are equivalent. - - The following fields are supported: name update_time - resource_properties security_marks.marks - security_center_properties.resource_name - security_center_properties.resource_display_name - security_center_properties.resource_parent - security_center_properties.resource_parent_display_name - security_center_properties.resource_project - security_center_properties.resource_project_display_name - security_center_properties.resource_type - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - assets. The filter is limited to assets existing - at the supplied time and their values are those - at that specific time. Absence of this field - will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListAssetsResult's - "state_change" attribute is updated to indicate whether the - asset was added, removed, or remained present during the - compare_duration period of time that precedes the read_time. - This is the time between (read_time - compare_duration) and - read_time. - - The state_change value is derived based on the presence of - the asset at the two points in time. Intermediate state - changes between the two times don't affect the result. For - example, the results aren't affected if the asset is removed - and re-created again. - - Possible "state_change" values when compare_duration is - specified: - - - "ADDED": indicates that the asset was not present at the - start of compare_duration, but present at read_time. - - "REMOVED": indicates that the asset was present at the - start of compare_duration, but not present at read_time. - - "ACTIVE": indicates that the asset was present at both - the start and the end of the time period defined by - compare_duration and read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all assets present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the ListAssetsResult - fields to be listed in the response. - An empty field mask will list all fields. - page_token (str): - The value returned by the last ``ListAssetsResponse``; - indicates that this is a continuation of a prior - ``ListAssets`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListAssetsResponse(proto.Message): - r"""Response message for listing assets. - - Attributes: - list_assets_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult]): - Assets matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of assets matching the - query. - """ - - class ListAssetsResult(proto.Message): - r"""Result containing the Asset and its State. - - Attributes: - asset (google.cloud.securitycenter_v1p1beta1.types.Asset): - Asset matching the search request. - state_change (google.cloud.securitycenter_v1p1beta1.types.ListAssetsResponse.ListAssetsResult.StateChange): - State change of the asset between the points - in time. - """ - class StateChange(proto.Enum): - r"""The change in state of the asset. - - When querying across two points in time this describes the change - between the two points: ADDED, REMOVED, or ACTIVE. If there was no - compare_duration supplied in the request the state change will be: - UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - ADDED (1): - Asset was added between the points in time. - REMOVED (2): - Asset was removed between the points in time. - ACTIVE (3): - Asset was present at both point(s) in time. - """ - UNUSED = 0 - ADDED = 1 - REMOVED = 2 - ACTIVE = 3 - - asset: gcs_asset.Asset = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_asset.Asset, - ) - state_change: 'ListAssetsResponse.ListAssetsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListAssetsResponse.ListAssetsResult.StateChange', - ) - - @property - def raw_page(self): - return self - - list_assets_results: MutableSequence[ListAssetsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListAssetsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class ListFindingsRequest(proto.Message): - r"""Request message for listing findings. - - Attributes: - parent (str): - Required. Name of the source the findings belong to. Its - format is - "organizations/[organization_id]/sources/[source_id], - folders/[folder_id]/sources/[source_id], or - projects/[project_id]/sources/[source_id]". To list across - all sources provide a source_id of ``-``. For example: - organizations/{organization_id}/sources/-, - folders/{folder_id}/sources/- or - projects/{projects_id}/sources/- - filter (str): - Expression that defines the filter to apply across findings. - The expression is a list of one or more restrictions - combined via logical operators ``AND`` and ``OR``. - Parentheses are supported, and ``OR`` has higher precedence - than ``AND``. - - Restrictions have the form `` `` - and may have a ``-`` character in front of them to indicate - negation. Examples include: - - - name - - source_properties.a_property - - security_marks.marks.marka - - The supported operators are: - - - ``=`` for all value types. - - ``>``, ``<``, ``>=``, ``<=`` for integer values. - - ``:``, meaning substring matching, for strings. - - The supported value types are: - - - string literals in quotes. - - integer literals without quotes. - - boolean literals ``true`` and ``false`` without quotes. - - The following field and operator combinations are supported: - - - name: ``=`` - - - parent: ``=``, ``:`` - - - resource_name: ``=``, ``:`` - - - state: ``=``, ``:`` - - - category: ``=``, ``:`` - - - external_uri: ``=``, ``:`` - - - event_time: ``=``, ``>``, ``<``, ``>=``, ``<=`` - - - severity: ``=``, ``:`` - - Usage: This should be milliseconds since epoch or an - RFC3339 string. Examples: - ``event_time = "2019-06-10T16:07:18-07:00"`` - ``event_time = 1560208038000`` - - security_marks.marks: ``=``, ``:`` source_properties: ``=``, - ``:``, ``>``, ``<``, ``>=``, ``<=`` - - For example, ``source_properties.size = 100`` is a valid - filter string. - - Use a partial match on the empty string to filter based on a - property existing: ``source_properties.my_property : ""`` - - Use a negated partial match on the empty string to filter - based on a property not existing: - ``-source_properties.my_property : ""`` - order_by (str): - Expression that defines what fields and order to use for - sorting. The string value should follow SQL syntax: comma - separated list of fields. For example: - "name,resource_properties.a_property". The default sorting - order is ascending. To specify descending order for a field, - a suffix " desc" should be appended to the field name. For - example: "name desc,source_properties.a_property". Redundant - space characters in the syntax are insignificant. "name - desc,source_properties.a_property" and " name desc , - source_properties.a_property " are equivalent. - - The following fields are supported: name parent state - category resource_name event_time source_properties - security_marks.marks - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used as a reference point when filtering - findings. The filter is limited to findings - existing at the supplied time and their values - are those at that specific time. Absence of this - field will default to the API's version of NOW. - compare_duration (google.protobuf.duration_pb2.Duration): - When compare_duration is set, the ListFindingsResult's - "state_change" attribute is updated to indicate whether the - finding had its state changed, the finding's state remained - unchanged, or if the finding was added in any state during - the compare_duration period of time that precedes the - read_time. This is the time between (read_time - - compare_duration) and read_time. - - The state_change value is derived based on the presence and - state of the finding at the two points in time. Intermediate - state changes between the two times don't affect the result. - For example, the results aren't affected if the finding is - made inactive and then active again. - - Possible "state_change" values when compare_duration is - specified: - - - "CHANGED": indicates that the finding was present and - matched the given filter at the start of - compare_duration, but changed its state at read_time. - - "UNCHANGED": indicates that the finding was present and - matched the given filter at the start of compare_duration - and did not change state at read_time. - - "ADDED": indicates that the finding did not match the - given filter or was not present at the start of - compare_duration, but was present at read_time. - - "REMOVED": indicates that the finding was present and - matched the filter at the start of compare_duration, but - did not match the filter at read_time. - - If compare_duration is not specified, then the only possible - state_change is "UNUSED", which will be the state_change set - for all findings present at read_time. - field_mask (google.protobuf.field_mask_pb2.FieldMask): - A field mask to specify the Finding fields to - be listed in the response. An empty field mask - will list all fields. - page_token (str): - The value returned by the last ``ListFindingsResponse``; - indicates that this is a continuation of a prior - ``ListFindings`` call, and that the system should return the - next page of data. - page_size (int): - The maximum number of results to return in a - single response. Default is 10, minimum is 1, - maximum is 1000. - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - filter: str = proto.Field( - proto.STRING, - number=2, - ) - order_by: str = proto.Field( - proto.STRING, - number=3, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=4, - message=timestamp_pb2.Timestamp, - ) - compare_duration: duration_pb2.Duration = proto.Field( - proto.MESSAGE, - number=5, - message=duration_pb2.Duration, - ) - field_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=7, - message=field_mask_pb2.FieldMask, - ) - page_token: str = proto.Field( - proto.STRING, - number=8, - ) - page_size: int = proto.Field( - proto.INT32, - number=9, - ) - - -class ListFindingsResponse(proto.Message): - r"""Response message for listing findings. - - Attributes: - list_findings_results (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult]): - Findings matching the list request. - read_time (google.protobuf.timestamp_pb2.Timestamp): - Time used for executing the list request. - next_page_token (str): - Token to retrieve the next page of results, - or empty if there are no more results. - total_size (int): - The total number of findings matching the - query. - """ - - class ListFindingsResult(proto.Message): - r"""Result containing the Finding and its StateChange. - - Attributes: - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Finding matching the search request. - state_change (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.StateChange): - State change of the finding between the - points in time. - resource (google.cloud.securitycenter_v1p1beta1.types.ListFindingsResponse.ListFindingsResult.Resource): - Output only. Resource that is associated with - this finding. - """ - class StateChange(proto.Enum): - r"""The change in state of the finding. - - When querying across two points in time this describes the change in - the finding between the two points: CHANGED, UNCHANGED, ADDED, or - REMOVED. Findings can not be deleted, so REMOVED implies that the - finding at timestamp does not match the filter specified, but it did - at timestamp - compare_duration. If there was no compare_duration - supplied in the request the state change will be: UNUSED - - Values: - UNUSED (0): - State change is unused, this is the canonical - default for this enum. - CHANGED (1): - The finding has changed state in some way - between the points in time and existed at both - points. - UNCHANGED (2): - The finding has not changed state between the - points in time and existed at both points. - ADDED (3): - The finding was created between the points in - time. - REMOVED (4): - The finding at timestamp does not match the filter - specified, but it did at timestamp - compare_duration. - """ - UNUSED = 0 - CHANGED = 1 - UNCHANGED = 2 - ADDED = 3 - REMOVED = 4 - - class Resource(proto.Message): - r"""Information related to the Google Cloud resource that is - associated with this finding. - - Attributes: - name (str): - The full resource name of the resource. See: - https://cloud.google.com/apis/design/resource_names#full_resource_name - project_name (str): - The full resource name of project that the - resource belongs to. - project_display_name (str): - The human readable name of project that the - resource belongs to. - parent_name (str): - The full resource name of resource's parent. - parent_display_name (str): - The human readable name of resource's parent. - folders (MutableSequence[google.cloud.securitycenter_v1p1beta1.types.Folder]): - Contains a Folder message for each folder in - the assets ancestry. The first folder is the - deepest nested folder, and the last folder is - the folder directly under the Organization. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - project_name: str = proto.Field( - proto.STRING, - number=2, - ) - project_display_name: str = proto.Field( - proto.STRING, - number=3, - ) - parent_name: str = proto.Field( - proto.STRING, - number=4, - ) - parent_display_name: str = proto.Field( - proto.STRING, - number=5, - ) - folders: MutableSequence[folder.Folder] = proto.RepeatedField( - proto.MESSAGE, - number=10, - message=folder.Folder, - ) - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - state_change: 'ListFindingsResponse.ListFindingsResult.StateChange' = proto.Field( - proto.ENUM, - number=2, - enum='ListFindingsResponse.ListFindingsResult.StateChange', - ) - resource: 'ListFindingsResponse.ListFindingsResult.Resource' = proto.Field( - proto.MESSAGE, - number=3, - message='ListFindingsResponse.ListFindingsResult.Resource', - ) - - @property - def raw_page(self): - return self - - list_findings_results: MutableSequence[ListFindingsResult] = proto.RepeatedField( - proto.MESSAGE, - number=1, - message=ListFindingsResult, - ) - read_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=2, - message=timestamp_pb2.Timestamp, - ) - next_page_token: str = proto.Field( - proto.STRING, - number=3, - ) - total_size: int = proto.Field( - proto.INT32, - number=4, - ) - - -class SetFindingStateRequest(proto.Message): - r"""Request message for updating a finding's state. - - Attributes: - name (str): - Required. The relative resource name of the finding. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}/finding/{finding_id}". - state (google.cloud.securitycenter_v1p1beta1.types.Finding.State): - Required. The desired State of the finding. - start_time (google.protobuf.timestamp_pb2.Timestamp): - Required. The time at which the updated state - takes effect. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - state: gcs_finding.Finding.State = proto.Field( - proto.ENUM, - number=2, - enum=gcs_finding.Finding.State, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -class RunAssetDiscoveryRequest(proto.Message): - r"""Request message for running asset discovery for an - organization. - - Attributes: - parent (str): - Required. Name of the organization to run asset discovery - for. Its format is "organizations/[organization_id]". - """ - - parent: str = proto.Field( - proto.STRING, - number=1, - ) - - -class UpdateFindingRequest(proto.Message): - r"""Request message for updating or creating a finding. - - Attributes: - finding (google.cloud.securitycenter_v1p1beta1.types.Finding): - Required. The finding resource to update or create if it - does not already exist. parent, security_marks, and - update_time will be ignored. - - In the case of creation, the finding id portion of the name - must be alphanumeric and less than or equal to 32 characters - and greater than 0 characters in length. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the finding resource. - This field should not be specified when creating a finding. - - When updating a finding, an empty mask is treated as - updating all mutable fields and replacing source_properties. - Individual source_properties can be added/updated by using - "source_properties." in the field mask. - """ - - finding: gcs_finding.Finding = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_finding.Finding, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateNotificationConfigRequest(proto.Message): - r"""Request message for updating a notification config. - - Attributes: - notification_config (google.cloud.securitycenter_v1p1beta1.types.NotificationConfig): - Required. The notification config to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - notification config. - If empty all mutable fields will be updated. - """ - - notification_config: gcs_notification_config.NotificationConfig = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_notification_config.NotificationConfig, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateOrganizationSettingsRequest(proto.Message): - r"""Request message for updating an organization's settings. - - Attributes: - organization_settings (google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings): - Required. The organization settings resource - to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the - settings resource. - If empty all mutable fields will be updated. - """ - - organization_settings: gcs_organization_settings.OrganizationSettings = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_organization_settings.OrganizationSettings, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSourceRequest(proto.Message): - r"""Request message for updating a source. - - Attributes: - source (google.cloud.securitycenter_v1p1beta1.types.Source): - Required. The source resource to update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the source - resource. - If empty all mutable fields will be updated. - """ - - source: gcs_source.Source = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_source.Source, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - - -class UpdateSecurityMarksRequest(proto.Message): - r"""Request message for updating a SecurityMarks resource. - - Attributes: - security_marks (google.cloud.securitycenter_v1p1beta1.types.SecurityMarks): - Required. The security marks resource to - update. - update_mask (google.protobuf.field_mask_pb2.FieldMask): - The FieldMask to use when updating the security marks - resource. - - The field mask must not contain duplicate fields. If empty - or set to "marks", all marks will be replaced. Individual - marks can be updated using "marks.". - start_time (google.protobuf.timestamp_pb2.Timestamp): - The time at which the updated SecurityMarks - take effect. If not set uses current server - time. Updates will be applied to the - SecurityMarks that are active immediately - preceding this time. - """ - - security_marks: gcs_security_marks.SecurityMarks = proto.Field( - proto.MESSAGE, - number=1, - message=gcs_security_marks.SecurityMarks, - ) - update_mask: field_mask_pb2.FieldMask = proto.Field( - proto.MESSAGE, - number=2, - message=field_mask_pb2.FieldMask, - ) - start_time: timestamp_pb2.Timestamp = proto.Field( - proto.MESSAGE, - number=3, - message=timestamp_pb2.Timestamp, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py b/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py deleted file mode 100644 index 05fb8de6..00000000 --- a/owl-bot-staging/v1p1beta1/google/cloud/securitycenter_v1p1beta1/types/source.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- 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. -# -from __future__ import annotations - -from typing import MutableMapping, MutableSequence - -import proto # type: ignore - - -__protobuf__ = proto.module( - package='google.cloud.securitycenter.v1p1beta1', - manifest={ - 'Source', - }, -) - - -class Source(proto.Message): - r"""Security Command Center finding source. A finding source - is an entity or a mechanism that can produce a finding. A source - is like a container of findings that come from the same scanner, - logger, monitor, etc. - - Attributes: - name (str): - The relative resource name of this source. See: - https://cloud.google.com/apis/design/resource_names#relative_resource_name - Example: - "organizations/{organization_id}/sources/{source_id}". - display_name (str): - The source's display name. - A source's display name must be unique amongst - its siblings, for example, two sources with the - same parent can't share the same display name. - The display name must have a length between 1 - and 64 characters (inclusive). - description (str): - The description of the source (max of 1024 - characters). Example: - "Web Security Scanner is a web security scanner - for common vulnerabilities in App Engine - applications. It can automatically scan and - detect four common vulnerabilities, including - cross-site-scripting (XSS), Flash injection, - mixed content (HTTP in HTTPS), and - outdated/insecure libraries.". - canonical_name (str): - The canonical name of the finding. It's either - "organizations/{organization_id}/sources/{source_id}", - "folders/{folder_id}/sources/{source_id}" or - "projects/{project_number}/sources/{source_id}", depending - on the closest CRM ancestor of the resource associated with - the finding. - """ - - name: str = proto.Field( - proto.STRING, - number=1, - ) - display_name: str = proto.Field( - proto.STRING, - number=2, - ) - description: str = proto.Field( - proto.STRING, - number=3, - ) - canonical_name: str = proto.Field( - proto.STRING, - number=14, - ) - - -__all__ = tuple(sorted(__protobuf__.manifest)) diff --git a/owl-bot-staging/v1p1beta1/mypy.ini b/owl-bot-staging/v1p1beta1/mypy.ini deleted file mode 100644 index 574c5aed..00000000 --- a/owl-bot-staging/v1p1beta1/mypy.ini +++ /dev/null @@ -1,3 +0,0 @@ -[mypy] -python_version = 3.7 -namespace_packages = True diff --git a/owl-bot-staging/v1p1beta1/noxfile.py b/owl-bot-staging/v1p1beta1/noxfile.py deleted file mode 100644 index bc69c724..00000000 --- a/owl-bot-staging/v1p1beta1/noxfile.py +++ /dev/null @@ -1,184 +0,0 @@ -# -*- 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 os -import pathlib -import shutil -import subprocess -import sys - - -import nox # type: ignore - -ALL_PYTHON = [ - "3.7", - "3.8", - "3.9", - "3.10", - "3.11", -] - -CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute() - -LOWER_BOUND_CONSTRAINTS_FILE = CURRENT_DIRECTORY / "constraints.txt" -PACKAGE_NAME = subprocess.check_output([sys.executable, "setup.py", "--name"], encoding="utf-8") - -BLACK_VERSION = "black==22.3.0" -BLACK_PATHS = ["docs", "google", "tests", "samples", "noxfile.py", "setup.py"] -DEFAULT_PYTHON_VERSION = "3.11" - -nox.sessions = [ - "unit", - "cover", - "mypy", - "check_lower_bounds" - # exclude update_lower_bounds from default - "docs", - "blacken", - "lint", - "lint_setup_py", -] - -@nox.session(python=ALL_PYTHON) -def unit(session): - """Run the unit test suite.""" - - session.install('coverage', 'pytest', 'pytest-cov', 'pytest-asyncio', 'asyncmock; python_version < "3.8"') - session.install('-e', '.') - - session.run( - 'py.test', - '--quiet', - '--cov=google/cloud/securitycenter_v1p1beta1/', - '--cov=tests/', - '--cov-config=.coveragerc', - '--cov-report=term', - '--cov-report=html', - os.path.join('tests', 'unit', ''.join(session.posargs)) - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def cover(session): - """Run the final coverage report. - This outputs the coverage report aggregating coverage from the unit - test runs (not system test runs), and then erases coverage data. - """ - session.install("coverage", "pytest-cov") - session.run("coverage", "report", "--show-missing", "--fail-under=100") - - session.run("coverage", "erase") - - -@nox.session(python=ALL_PYTHON) -def mypy(session): - """Run the type checker.""" - session.install( - 'mypy', - 'types-requests', - 'types-protobuf' - ) - session.install('.') - session.run( - 'mypy', - '--explicit-package-bases', - 'google', - ) - - -@nox.session -def update_lower_bounds(session): - """Update lower bounds in constraints.txt to match setup.py""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'update', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - - -@nox.session -def check_lower_bounds(session): - """Check lower bounds in setup.py are reflected in constraints file""" - session.install('google-cloud-testutils') - session.install('.') - - session.run( - 'lower-bound-checker', - 'check', - '--package-name', - PACKAGE_NAME, - '--constraints-file', - str(LOWER_BOUND_CONSTRAINTS_FILE), - ) - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def docs(session): - """Build the docs for this library.""" - - session.install("-e", ".") - session.install("sphinx==4.0.1", "alabaster", "recommonmark") - - shutil.rmtree(os.path.join("docs", "_build"), ignore_errors=True) - session.run( - "sphinx-build", - "-W", # warnings as errors - "-T", # show full traceback on exception - "-N", # no colors - "-b", - "html", - "-d", - os.path.join("docs", "_build", "doctrees", ""), - os.path.join("docs", ""), - os.path.join("docs", "_build", "html", ""), - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint(session): - """Run linters. - - Returns a failure if the linters find linting errors or sufficiently - serious code quality issues. - """ - session.install("flake8", BLACK_VERSION) - session.run( - "black", - "--check", - *BLACK_PATHS, - ) - session.run("flake8", "google", "tests", "samples") - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def blacken(session): - """Run black. Format code to uniform standard.""" - session.install(BLACK_VERSION) - session.run( - "black", - *BLACK_PATHS, - ) - - -@nox.session(python=DEFAULT_PYTHON_VERSION) -def lint_setup_py(session): - """Verify that setup.py is valid (including RST check).""" - session.install("docutils", "pygments") - session.run("python", "setup.py", "check", "--restructuredtext", "--strict") diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py deleted file mode 100644 index ef2942ac..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = await client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py deleted file mode 100644 index 94caafaf..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateFindingRequest( - parent="parent_value", - finding_id="finding_id_value", - ) - - # Make the request - response = client.create_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py deleted file mode 100644 index 612c30b2..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = await client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py deleted file mode 100644 index 8ea771f7..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateNotificationConfigRequest( - parent="parent_value", - config_id="config_id_value", - ) - - # Make the request - response = client.create_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py deleted file mode 100644 index 9c599ff1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = await client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py deleted file mode 100644 index 57fc8d29..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_create_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for CreateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_create_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.CreateSourceRequest( - parent="parent_value", - ) - - # Make the request - response = client.create_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py deleted file mode 100644 index 9c019213..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - await client.delete_notification_config(request=request) - - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py deleted file mode 100644 index c6749af1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for DeleteNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_delete_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.DeleteNotificationConfigRequest( - name="name_value", - ) - - # Make the request - client.delete_notification_config(request=request) - - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py deleted file mode 100644 index 52a3b23e..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py deleted file mode 100644 index 492edf74..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_get_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.GetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.get_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py deleted file mode 100644 index 31300fbc..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = await client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py deleted file mode 100644 index 7df5d0f5..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetNotificationConfigRequest( - name="name_value", - ) - - # Make the request - response = client.get_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py deleted file mode 100644 index d593432d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = await client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py deleted file mode 100644 index 77db9ca0..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetOrganizationSettingsRequest( - name="name_value", - ) - - # Make the request - response = client.get_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py deleted file mode 100644 index b6408c81..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_async.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = await client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py deleted file mode 100644 index 89b9154d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_get_source_sync.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GetSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_get_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GetSourceRequest( - name="name_value", - ) - - # Make the request - response = client.get_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py deleted file mode 100644 index 170d9c60..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py deleted file mode 100644 index 0e0f6c95..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_group_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupAssetsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py deleted file mode 100644 index d3082c32..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py deleted file mode 100644 index f31156df..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for GroupFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_group_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.GroupFindingsRequest( - parent="parent_value", - group_by="group_by_value", - ) - - # Make the request - page_result = client.group_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py deleted file mode 100644 index 3e190b23..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py deleted file mode 100644 index 68effc1f..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListAssets -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_assets(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListAssetsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_assets(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py deleted file mode 100644 index dadc521c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py deleted file mode 100644 index ad7b5c4c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListFindings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_findings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListFindingsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_findings(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py deleted file mode 100644 index 520b1905..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py deleted file mode 100644 index c31addea..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListNotificationConfigs -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_notification_configs(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListNotificationConfigsRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_notification_configs(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py deleted file mode 100644 index 0a8fa68d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - async for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py deleted file mode 100644 index 187eaf3a..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for ListSources -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_list_sources(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.ListSourcesRequest( - parent="parent_value", - ) - - # Make the request - page_result = client.list_sources(request=request) - - # Handle the response - for response in page_result: - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py deleted file mode 100644 index 1f51b6eb..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = (await operation).result() - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py deleted file mode 100644 index b6ccd7af..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for RunAssetDiscovery -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_run_asset_discovery(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.RunAssetDiscoveryRequest( - parent="parent_value", - ) - - # Make the request - operation = client.run_asset_discovery(request=request) - - print("Waiting for operation to complete...") - - response = operation.result() - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py deleted file mode 100644 index 8248bf7d..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = await client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py deleted file mode 100644 index 4c530ca1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetFindingState -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_set_finding_state(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.SetFindingStateRequest( - name="name_value", - state="INACTIVE", - ) - - # Make the request - response = client.set_finding_state(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py deleted file mode 100644 index d22f33d1..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = await client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py deleted file mode 100644 index a3008967..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for SetIamPolicy -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_set_iam_policy(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.SetIamPolicyRequest( - resource="resource_value", - ) - - # Make the request - response = client.set_iam_policy(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py deleted file mode 100644 index 2f837372..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -async def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = await client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py deleted file mode 100644 index d0254a87..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for TestIamPermissions -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 -from google.iam.v1 import iam_policy_pb2 # type: ignore - - -def sample_test_iam_permissions(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = iam_policy_pb2.TestIamPermissionsRequest( - resource="resource_value", - permissions=['permissions_value1', 'permissions_value2'], - ) - - # Make the request - response = client.test_iam_permissions(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py deleted file mode 100644 index 3d89b4d8..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = await client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py deleted file mode 100644 index 568c925c..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateFinding -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_finding(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateFindingRequest( - ) - - # Make the request - response = client.update_finding(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py deleted file mode 100644 index 8401b510..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = await client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py deleted file mode 100644 index 215b8872..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateNotificationConfig -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_notification_config(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateNotificationConfigRequest( - ) - - # Make the request - response = client.update_notification_config(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py deleted file mode 100644 index 2d5a82f3..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = await client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py deleted file mode 100644 index 703bedc5..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateOrganizationSettings -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_organization_settings(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateOrganizationSettingsRequest( - ) - - # Make the request - response = client.update_organization_settings(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py deleted file mode 100644 index 69f8fd59..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = await client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py deleted file mode 100644 index d4649225..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSecurityMarks -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_security_marks(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSecurityMarksRequest( - ) - - # Make the request - response = client.update_security_marks(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py deleted file mode 100644 index ad60833b..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_async.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -async def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterAsyncClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = await client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py b/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py deleted file mode 100644 index 22e21644..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/securitycenter_v1p1beta1_generated_security_center_update_source_sync.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- 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. -# -# Generated code. DO NOT EDIT! -# -# Snippet for UpdateSource -# NOTE: This snippet has been automatically generated for illustrative purposes only. -# It may require modifications to work in your environment. - -# To install the latest published package dependency, execute the following: -# python3 -m pip install google-cloud-securitycenter - - -# [START securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] -# This snippet has been automatically generated and should be regarded as a -# code template only. -# It will require modifications to work: -# - It may require correct/in-range values for request initialization. -# - It may require specifying regional endpoints when creating the service -# client as shown in: -# https://googleapis.dev/python/google-api-core/latest/client_options.html -from google.cloud import securitycenter_v1p1beta1 - - -def sample_update_source(): - # Create a client - client = securitycenter_v1p1beta1.SecurityCenterClient() - - # Initialize request argument(s) - request = securitycenter_v1p1beta1.UpdateSourceRequest( - ) - - # Make the request - response = client.update_source(request=request) - - # Handle the response - print(response) - -# [END securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync] diff --git a/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json b/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json deleted file mode 100644 index 774592ce..00000000 --- a/owl-bot-staging/v1p1beta1/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json +++ /dev/null @@ -1,3808 +0,0 @@ -{ - "clientLibrary": { - "apis": [ - { - "id": "google.cloud.securitycenter.v1p1beta1", - "version": "v1p1beta1" - } - ], - "language": "PYTHON", - "name": "google-cloud-securitycenter", - "version": "0.1.0" - }, - "snippets": [ - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateFindingRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "finding_id", - "type": "str" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "create_finding" - }, - "description": "Sample for CreateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateFinding_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateNotificationConfigRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "config_id", - "type": "str" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "create_notification_config" - }, - "description": "Sample for CreateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateNotificationConfig_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.create_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.CreateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "CreateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.CreateSourceRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "create_source" - }, - "description": "Sample for CreateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_CreateSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_create_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_async", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.delete_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.DeleteNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "DeleteNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.DeleteNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "shortName": "delete_notification_config" - }, - "description": "Sample for DeleteNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_DeleteNotificationConfig_sync", - "segments": [ - { - "end": 49, - "start": 27, - "type": "FULL" - }, - { - "end": 49, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_delete_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" - }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetNotificationConfigRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "get_notification_config" - }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetNotificationConfig_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetOrganizationSettingsRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "get_organization_settings" - }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetOrganizationSettings_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_async", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.get_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GetSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GetSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GetSourceRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "get_source" - }, - "description": "Sample for GetSource", - "file": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GetSource_sync", - "segments": [ - { - "end": 51, - "start": 27, - "type": "FULL" - }, - { - "end": 51, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 52, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_get_source_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupAssetsRequest" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" - }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupAssets_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.group_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.GroupFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "GroupFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.GroupFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "group_by", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" - }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_GroupFindings_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_group_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_assets", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListAssets", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListAssets" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListAssetsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" - }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListAssets_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_assets_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_findings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListFindings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListFindings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListFindingsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" - }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListFindings_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_findings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_notification_configs", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListNotificationConfigs", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListNotificationConfigs" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListNotificationConfigsRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" - }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListNotificationConfigs_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_notification_configs_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesAsyncPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.list_sources", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.ListSources", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "ListSources" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.ListSourcesRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.services.security_center.pagers.ListSourcesPager", - "shortName": "list_sources" - }, - "description": "Sample for ListSources", - "file": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_ListSources_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 48, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 49, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_list_sources_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation_async.AsyncOperation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_async", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.run_asset_discovery", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.RunAssetDiscovery", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "RunAssetDiscovery" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.RunAssetDiscoveryRequest" - }, - { - "name": "parent", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.api_core.operation.Operation", - "shortName": "run_asset_discovery" - }, - "description": "Sample for RunAssetDiscovery", - "file": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_RunAssetDiscovery_sync", - "segments": [ - { - "end": 55, - "start": 27, - "type": "FULL" - }, - { - "end": 55, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 45, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 52, - "start": 46, - "type": "REQUEST_EXECUTION" - }, - { - "end": 56, - "start": 53, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_run_asset_discovery_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_finding_state", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetFindingState", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetFindingState" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.SetFindingStateRequest" - }, - { - "name": "name", - "type": "str" - }, - { - "name": "state", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding.State" - }, - { - "name": "start_time", - "type": "google.protobuf.timestamp_pb2.Timestamp" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "set_finding_state" - }, - "description": "Sample for SetFindingState", - "file": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetFindingState_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_finding_state_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_async", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.set_iam_policy", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.SetIamPolicy", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "SetIamPolicy" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.SetIamPolicyRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "set_iam_policy" - }, - "description": "Sample for SetIamPolicy", - "file": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_SetIamPolicy_sync", - "segments": [ - { - "end": 52, - "start": 27, - "type": "FULL" - }, - { - "end": 52, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 46, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 49, - "start": 47, - "type": "REQUEST_EXECUTION" - }, - { - "end": 53, - "start": 50, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_set_iam_policy_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_async", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.test_iam_permissions", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.TestIamPermissions", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "TestIamPermissions" - }, - "parameters": [ - { - "name": "request", - "type": "google.iam.v1.iam_policy_pb2.TestIamPermissionsRequest" - }, - { - "name": "resource", - "type": "str" - }, - { - "name": "permissions", - "type": "MutableSequence[str]" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.iam.v1.iam_policy_pb2.TestIamPermissionsResponse", - "shortName": "test_iam_permissions" - }, - "description": "Sample for TestIamPermissions", - "file": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_TestIamPermissions_sync", - "segments": [ - { - "end": 53, - "start": 27, - "type": "FULL" - }, - { - "end": 53, - "start": 27, - "type": "SHORT" - }, - { - "end": 41, - "start": 39, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 47, - "start": 42, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 50, - "start": 48, - "type": "REQUEST_EXECUTION" - }, - { - "end": 54, - "start": 51, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_test_iam_permissions_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_finding", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateFinding", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateFinding" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateFindingRequest" - }, - { - "name": "finding", - "type": "google.cloud.securitycenter_v1p1beta1.types.Finding" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Finding", - "shortName": "update_finding" - }, - "description": "Sample for UpdateFinding", - "file": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateFinding_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_finding_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_notification_config", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateNotificationConfig", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateNotificationConfig" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateNotificationConfigRequest" - }, - { - "name": "notification_config", - "type": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.NotificationConfig", - "shortName": "update_notification_config" - }, - "description": "Sample for UpdateNotificationConfig", - "file": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateNotificationConfig_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_notification_config_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_organization_settings", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateOrganizationSettings", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateOrganizationSettings" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateOrganizationSettingsRequest" - }, - { - "name": "organization_settings", - "type": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.OrganizationSettings", - "shortName": "update_organization_settings" - }, - "description": "Sample for UpdateOrganizationSettings", - "file": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateOrganizationSettings_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_organization_settings_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_security_marks", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSecurityMarks", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSecurityMarks" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSecurityMarksRequest" - }, - { - "name": "security_marks", - "type": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.SecurityMarks", - "shortName": "update_security_marks" - }, - "description": "Sample for UpdateSecurityMarks", - "file": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSecurityMarks_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_security_marks_sync.py" - }, - { - "canonical": true, - "clientMethod": { - "async": true, - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterAsyncClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_async", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_source_async.py" - }, - { - "canonical": true, - "clientMethod": { - "client": { - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient", - "shortName": "SecurityCenterClient" - }, - "fullName": "google.cloud.securitycenter_v1p1beta1.SecurityCenterClient.update_source", - "method": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter.UpdateSource", - "service": { - "fullName": "google.cloud.securitycenter.v1p1beta1.SecurityCenter", - "shortName": "SecurityCenter" - }, - "shortName": "UpdateSource" - }, - "parameters": [ - { - "name": "request", - "type": "google.cloud.securitycenter_v1p1beta1.types.UpdateSourceRequest" - }, - { - "name": "source", - "type": "google.cloud.securitycenter_v1p1beta1.types.Source" - }, - { - "name": "update_mask", - "type": "google.protobuf.field_mask_pb2.FieldMask" - }, - { - "name": "retry", - "type": "google.api_core.retry.Retry" - }, - { - "name": "timeout", - "type": "float" - }, - { - "name": "metadata", - "type": "Sequence[Tuple[str, str]" - } - ], - "resultType": "google.cloud.securitycenter_v1p1beta1.types.Source", - "shortName": "update_source" - }, - "description": "Sample for UpdateSource", - "file": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py", - "language": "PYTHON", - "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1p1beta1_generated_SecurityCenter_UpdateSource_sync", - "segments": [ - { - "end": 50, - "start": 27, - "type": "FULL" - }, - { - "end": 50, - "start": 27, - "type": "SHORT" - }, - { - "end": 40, - "start": 38, - "type": "CLIENT_INITIALIZATION" - }, - { - "end": 44, - "start": 41, - "type": "REQUEST_INITIALIZATION" - }, - { - "end": 47, - "start": 45, - "type": "REQUEST_EXECUTION" - }, - { - "end": 51, - "start": 48, - "type": "RESPONSE_HANDLING" - } - ], - "title": "securitycenter_v1p1beta1_generated_security_center_update_source_sync.py" - } - ] -} diff --git a/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py b/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py deleted file mode 100644 index c285b274..00000000 --- a/owl-bot-staging/v1p1beta1/scripts/fixup_securitycenter_v1p1beta1_keywords.py +++ /dev/null @@ -1,198 +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 securitycenterCallTransformer(cst.CSTTransformer): - CTRL_PARAMS: Tuple[str] = ('retry', 'timeout', 'metadata') - METHOD_TO_PARAMS: Dict[str, Tuple[str]] = { - 'create_finding': ('parent', 'finding_id', 'finding', ), - 'create_notification_config': ('parent', 'config_id', 'notification_config', ), - 'create_source': ('parent', 'source', ), - 'delete_notification_config': ('name', ), - 'get_iam_policy': ('resource', 'options', ), - 'get_notification_config': ('name', ), - 'get_organization_settings': ('name', ), - 'get_source': ('name', ), - 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), - 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), - 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), - 'list_notification_configs': ('parent', 'page_token', 'page_size', ), - 'list_sources': ('parent', 'page_token', 'page_size', ), - 'run_asset_discovery': ('parent', ), - 'set_finding_state': ('name', 'state', 'start_time', ), - 'set_iam_policy': ('resource', 'policy', 'update_mask', ), - 'test_iam_permissions': ('resource', 'permissions', ), - 'update_finding': ('finding', 'update_mask', ), - 'update_notification_config': ('notification_config', 'update_mask', ), - 'update_organization_settings': ('organization_settings', 'update_mask', ), - 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), - 'update_source': ('source', 'update_mask', ), - } - - 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=securitycenterCallTransformer(), -): - """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 securitycenter 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/owl-bot-staging/v1p1beta1/setup.py b/owl-bot-staging/v1p1beta1/setup.py deleted file mode 100644 index f1154c41..00000000 --- a/owl-bot-staging/v1p1beta1/setup.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- 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 io -import os - -import setuptools # type: ignore - -package_root = os.path.abspath(os.path.dirname(__file__)) - -name = 'google-cloud-securitycenter' - - -description = "Google Cloud Securitycenter API client library" - -version = {} -with open(os.path.join(package_root, 'google/cloud/securitycenter/gapic_version.py')) as fp: - exec(fp.read(), version) -version = version["__version__"] - -if version[0] == "0": - release_status = "Development Status :: 4 - Beta" -else: - release_status = "Development Status :: 5 - Production/Stable" - -dependencies = [ - "google-api-core[grpc] >= 1.34.0, <3.0.0dev,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*", - "proto-plus >= 1.22.0, <2.0.0dev", - "proto-plus >= 1.22.2, <2.0.0dev; python_version>='3.11'", - "protobuf>=3.19.5,<5.0.0dev,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5", - "grpc-google-iam-v1 >= 0.12.4, <1.0.0dev", -] -url = "https://github.com/googleapis/python-securitycenter" - -package_root = os.path.abspath(os.path.dirname(__file__)) - -readme_filename = os.path.join(package_root, "README.rst") -with io.open(readme_filename, encoding="utf-8") as readme_file: - readme = readme_file.read() - -packages = [ - package - for package in setuptools.PEP420PackageFinder.find() - if package.startswith("google") -] - -namespaces = ["google", "google.cloud"] - -setuptools.setup( - name=name, - version=version, - description=description, - long_description=readme, - author="Google LLC", - author_email="googleapis-packages@google.com", - license="Apache 2.0", - url=url, - classifiers=[ - release_status, - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - "Topic :: Internet", - ], - platforms="Posix; MacOS X; Windows", - packages=packages, - python_requires=">=3.7", - namespace_packages=namespaces, - install_requires=dependencies, - include_package_data=True, - zip_safe=False, -) diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.10.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.11.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.12.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt deleted file mode 100644 index 2beecf99..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.7.txt +++ /dev/null @@ -1,10 +0,0 @@ -# This constraints file is used to check that lower bounds -# are correct in setup.py -# List all library dependencies and extras in this file. -# Pin the version to the lower bound. -# e.g., if setup.py has "google-cloud-foo >= 1.14.0, < 2.0.0dev", -# Then this file should have google-cloud-foo==1.14.0 -google-api-core==1.34.0 -proto-plus==1.22.0 -protobuf==3.19.5 -grpc-google-iam-v1==0.12.4 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.8.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt b/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt deleted file mode 100644 index ad3f0fa5..00000000 --- a/owl-bot-staging/v1p1beta1/testing/constraints-3.9.txt +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -# This constraints file is required for unit tests. -# List all library dependencies and extras in this file. -google-api-core -proto-plus -protobuf -grpc-google-iam-v1 diff --git a/owl-bot-staging/v1p1beta1/tests/__init__.py b/owl-bot-staging/v1p1beta1/tests/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py deleted file mode 100644 index 231bc125..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ - -# -*- 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. -# diff --git a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py b/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py deleted file mode 100644 index 370aacb7..00000000 --- a/owl-bot-staging/v1p1beta1/tests/unit/gapic/securitycenter_v1p1beta1/test_security_center.py +++ /dev/null @@ -1,14070 +0,0 @@ -# -*- 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 os -# try/except added for compatibility with python < 3.8 -try: - from unittest import mock - from unittest.mock import AsyncMock # pragma: NO COVER -except ImportError: # pragma: NO COVER - import mock - -import grpc -from grpc.experimental import aio -from collections.abc import Iterable -from google.protobuf import json_format -import json -import math -import pytest -from proto.marshal.rules.dates import DurationRule, TimestampRule -from proto.marshal.rules import wrappers -from requests import Response -from requests import Request, PreparedRequest -from requests.sessions import Session -from google.protobuf import json_format - -from google.api_core import client_options -from google.api_core import exceptions as core_exceptions -from google.api_core import future -from google.api_core import gapic_v1 -from google.api_core import grpc_helpers -from google.api_core import grpc_helpers_async -from google.api_core import operation -from google.api_core import operation_async # type: ignore -from google.api_core import operations_v1 -from google.api_core import path_template -from google.auth import credentials as ga_credentials -from google.auth.exceptions import MutualTLSChannelError -from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterAsyncClient -from google.cloud.securitycenter_v1p1beta1.services.security_center import SecurityCenterClient -from google.cloud.securitycenter_v1p1beta1.services.security_center import pagers -from google.cloud.securitycenter_v1p1beta1.services.security_center import transports -from google.cloud.securitycenter_v1p1beta1.types import finding -from google.cloud.securitycenter_v1p1beta1.types import finding as gcs_finding -from google.cloud.securitycenter_v1p1beta1.types import notification_config -from google.cloud.securitycenter_v1p1beta1.types import notification_config as gcs_notification_config -from google.cloud.securitycenter_v1p1beta1.types import organization_settings -from google.cloud.securitycenter_v1p1beta1.types import organization_settings as gcs_organization_settings -from google.cloud.securitycenter_v1p1beta1.types import run_asset_discovery_response -from google.cloud.securitycenter_v1p1beta1.types import security_marks -from google.cloud.securitycenter_v1p1beta1.types import security_marks as gcs_security_marks -from google.cloud.securitycenter_v1p1beta1.types import securitycenter_service -from google.cloud.securitycenter_v1p1beta1.types import source -from google.cloud.securitycenter_v1p1beta1.types import source as gcs_source -from google.iam.v1 import iam_policy_pb2 # type: ignore -from google.iam.v1 import options_pb2 # type: ignore -from google.iam.v1 import policy_pb2 # type: ignore -from google.longrunning import operations_pb2 -from google.oauth2 import service_account -from google.protobuf import duration_pb2 # type: ignore -from google.protobuf import empty_pb2 # type: ignore -from google.protobuf import field_mask_pb2 # type: ignore -from google.protobuf import struct_pb2 # type: ignore -from google.protobuf import timestamp_pb2 # type: ignore -from google.type import expr_pb2 # type: ignore -import google.auth - - -def client_cert_source_callback(): - return b"cert bytes", b"key bytes" - - -# If default endpoint is localhost, then default mtls endpoint will be the same. -# This method modifies the default endpoint so the client can produce a different -# mtls endpoint for endpoint testing purposes. -def modify_default_endpoint(client): - return "foo.googleapis.com" if ("localhost" in client.DEFAULT_ENDPOINT) else client.DEFAULT_ENDPOINT - - -def test__get_default_mtls_endpoint(): - api_endpoint = "example.googleapis.com" - api_mtls_endpoint = "example.mtls.googleapis.com" - sandbox_endpoint = "example.sandbox.googleapis.com" - sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" - non_googleapi = "api.example.com" - - assert SecurityCenterClient._get_default_mtls_endpoint(None) is None - assert SecurityCenterClient._get_default_mtls_endpoint(api_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(api_mtls_endpoint) == api_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) == sandbox_mtls_endpoint - assert SecurityCenterClient._get_default_mtls_endpoint(non_googleapi) == non_googleapi - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_info(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_info') as factory: - factory.return_value = creds - info = {"valid": True} - client = client_class.from_service_account_info(info, transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -@pytest.mark.parametrize("transport_class,transport_name", [ - (transports.SecurityCenterGrpcTransport, "grpc"), - (transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_service_account_always_use_jwt(transport_class, transport_name): - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=True) - use_jwt.assert_called_once_with(True) - - with mock.patch.object(service_account.Credentials, 'with_always_use_jwt_access', create=True) as use_jwt: - creds = service_account.Credentials(None, None, None) - transport = transport_class(credentials=creds, always_use_jwt_access=False) - use_jwt.assert_not_called() - - -@pytest.mark.parametrize("client_class,transport_name", [ - (SecurityCenterClient, "grpc"), - (SecurityCenterAsyncClient, "grpc_asyncio"), - (SecurityCenterClient, "rest"), -]) -def test_security_center_client_from_service_account_file(client_class, transport_name): - creds = ga_credentials.AnonymousCredentials() - with mock.patch.object(service_account.Credentials, 'from_service_account_file') as factory: - factory.return_value = creds - client = client_class.from_service_account_file("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - client = client_class.from_service_account_json("dummy/file/path.json", transport=transport_name) - assert client.transport._credentials == creds - assert isinstance(client, client_class) - - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else - 'https://securitycenter.googleapis.com' - ) - - -def test_security_center_client_get_transport_class(): - transport = SecurityCenterClient.get_transport_class() - available_transports = [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterRestTransport, - ] - assert transport in available_transports - - transport = SecurityCenterClient.get_transport_class("grpc") - assert transport == transports.SecurityCenterGrpcTransport - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_client_options(client_class, transport_class, transport_name): - # Check that if channel is provided we won't create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ) - client = client_class(transport=transport) - gtc.assert_not_called() - - # Check that if channel is provided via str we will create a new one. - with mock.patch.object(SecurityCenterClient, 'get_transport_class') as gtc: - client = client_class(transport=transport_name) - gtc.assert_called() - - # Check the case api_endpoint is provided. - options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name, client_options=options) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is - # "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_MTLS_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has - # unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): - with pytest.raises(MutualTLSChannelError): - client = client_class(transport=transport_name) - - # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"}): - with pytest.raises(ValueError): - client = client_class(transport=transport_name) - - # Check the case quota_project_id is provided - options = client_options.ClientOptions(quota_project_id="octopus") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id="octopus", - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - # Check the case api_endpoint is provided - options = client_options.ClientOptions(api_audience="https://language.googleapis.com") - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience="https://language.googleapis.com" - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,use_client_cert_env", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "true"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "true"), - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", "false"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", "false"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "true"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", "false"), -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) -def test_security_center_client_mtls_env_auto(client_class, transport_class, transport_name, use_client_cert_env): - # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default - # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. - - # Check the case client_cert_source is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - options = client_options.ClientOptions(client_cert_source=client_cert_source_callback) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - - if use_client_cert_env == "false": - expected_client_cert_source = None - expected_host = client.DEFAULT_ENDPOINT - else: - expected_client_cert_source = client_cert_source_callback - expected_host = client.DEFAULT_MTLS_ENDPOINT - - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case ADC client cert is provided. Whether client cert is used depends on - # GOOGLE_API_USE_CLIENT_CERTIFICATE value. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=client_cert_source_callback): - if use_client_cert_env == "false": - expected_host = client.DEFAULT_ENDPOINT - expected_client_cert_source = None - else: - expected_host = client.DEFAULT_MTLS_ENDPOINT - expected_client_cert_source = client_cert_source_callback - - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=expected_host, - scopes=None, - client_cert_source_for_mtls=expected_client_cert_source, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # Check the case client_cert_source and ADC client cert are not provided. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env}): - with mock.patch.object(transport_class, '__init__') as patched: - with mock.patch("google.auth.transport.mtls.has_default_client_cert_source", return_value=False): - patched.return_value = None - client = client_class(transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class", [ - SecurityCenterClient, SecurityCenterAsyncClient -]) -@mock.patch.object(SecurityCenterClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterClient)) -@mock.patch.object(SecurityCenterAsyncClient, "DEFAULT_ENDPOINT", modify_default_endpoint(SecurityCenterAsyncClient)) -def test_security_center_client_get_mtls_endpoint_and_cert_source(client_class): - mock_client_cert_source = mock.Mock() - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source == mock_client_cert_source - - # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): - mock_client_cert_source = mock.Mock() - mock_api_endpoint = "foo" - options = client_options.ClientOptions(client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint) - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source(options) - assert api_endpoint == mock_api_endpoint - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=False): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_ENDPOINT - assert cert_source is None - - # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. - with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): - with mock.patch('google.auth.transport.mtls.has_default_client_cert_source', return_value=True): - with mock.patch('google.auth.transport.mtls.default_client_cert_source', return_value=mock_client_cert_source): - api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() - assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT - assert cert_source == mock_client_cert_source - - -@pytest.mark.parametrize("client_class,transport_class,transport_name", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc"), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio"), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest"), -]) -def test_security_center_client_client_options_scopes(client_class, transport_class, transport_name): - # Check the case scopes are provided. - options = client_options.ClientOptions( - scopes=["1", "2"], - ) - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=["1", "2"], - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), - (SecurityCenterClient, transports.SecurityCenterRestTransport, "rest", None), -]) -def test_security_center_client_client_options_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - -def test_security_center_client_client_options_from_dict(): - with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterGrpcTransport.__init__') as grpc_transport: - grpc_transport.return_value = None - client = SecurityCenterClient( - client_options={'api_endpoint': 'squid.clam.whelk'} - ) - grpc_transport.assert_called_once_with( - credentials=None, - credentials_file=None, - host="squid.clam.whelk", - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - -@pytest.mark.parametrize("client_class,transport_class,transport_name,grpc_helpers", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport, "grpc", grpc_helpers), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport, "grpc_asyncio", grpc_helpers_async), -]) -def test_security_center_client_create_channel_credentials_file(client_class, transport_class, transport_name, grpc_helpers): - # Check the case credentials file is provided. - options = client_options.ClientOptions( - credentials_file="credentials.json" - ) - - with mock.patch.object(transport_class, '__init__') as patched: - patched.return_value = None - client = client_class(client_options=options, transport=transport_name) - patched.assert_called_once_with( - credentials=None, - credentials_file="credentials.json", - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) - - # test that the credentials from file are saved and used as the credentials. - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch.object( - google.auth, "default", autospec=True - ) as adc, mock.patch.object( - grpc_helpers, "create_channel" - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - file_creds = ga_credentials.AnonymousCredentials() - load_creds.return_value = (file_creds, None) - adc.return_value = (creds, None) - client = client_class(client_options=options, transport=transport_name) - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=file_creds, - credentials_file=None, - quota_project_id=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=None, - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - client.create_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - -@pytest.mark.asyncio -async def test_create_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_source_async_from_dict(): - await test_create_source_async(request_type=dict) - - -def test_create_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateSourceRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.create_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - - -def test_create_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_source( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_create_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - client.create_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - -@pytest.mark.asyncio -async def test_create_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_create_finding_async_from_dict(): - await test_create_finding_async(request_type=dict) - - -def test_create_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateFindingRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.create_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - - -def test_create_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_finding( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].finding_id - mock_val = 'finding_id_value' - assert arg == mock_val - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - client.create_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_create_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_create_notification_config_async_from_dict(): - await test_create_notification_config_async(request_type=dict) - - -def test_create_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_create_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateNotificationConfigRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.create_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_create_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - - -def test_create_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.create_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.create_notification_config( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].config_id - mock_val = 'config_id_value' - assert arg == mock_val - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_create_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - client.delete_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_delete_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert response is None - - -@pytest.mark.asyncio -async def test_delete_notification_config_async_from_dict(): - await test_delete_notification_config_async(request_type=dict) - - -def test_delete_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = None - client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_delete_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_delete_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_delete_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.delete_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = None - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.delete_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_delete_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - client.get_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_get_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.GetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_get_iam_policy_async_from_dict(): - await test_get_iam_policy_async(request_type=dict) - - -def test_get_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.GetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.get_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_get_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.get_iam_policy(request={ - 'resource': 'resource_value', - 'options': options_pb2.GetPolicyOptions(requested_policy_version=2598), - } - ) - call.assert_called() - - -def test_get_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_get_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - client.get_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_get_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_get_notification_config_async_from_dict(): - await test_get_notification_config_async(request_type=dict) - - -def test_get_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = notification_config.NotificationConfig() - client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetNotificationConfigRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - await client.get_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_notification_config( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - client.get_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_get_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_get_organization_settings_async_from_dict(): - await test_get_organization_settings_async(request_type=dict) - - -def test_get_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = organization_settings.OrganizationSettings() - client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetOrganizationSettingsRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - await client.get_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_organization_settings( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - client.get_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - -@pytest.mark.asyncio -async def test_get_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) - - -def test_get_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = source.Source() - client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_get_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_get_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - - -def test_get_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - -@pytest.mark.asyncio -async def test_get_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.get_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.get_source( - name='name_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_get_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - client.group_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - -@pytest.mark.asyncio -async def test_group_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) - - -def test_group_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupAssetsResponse()) - await client.group_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - client.group_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - -@pytest.mark.asyncio -async def test_group_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) - - -def test_group_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_group_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - await client.group_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_group_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - - -def test_group_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - -@pytest.mark.asyncio -async def test_group_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.GroupFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.group_findings( - parent='parent_value', - group_by='group_by_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - arg = args[0].group_by - mock_val = 'group_by_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.group_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = list(client.group_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_group_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.group_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_group_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.group_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - client.list_assets() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - -@pytest.mark.asyncio -async def test_list_assets_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) - - -def test_list_assets_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_assets_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - await client.list_assets(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_assets_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_assets( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_assets_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_assets_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListAssetsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_assets( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_assets_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - - -def test_list_assets_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_assets(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_assets(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_assets_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_assets(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_assets_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_assets), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_assets(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - response = client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - client.list_findings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - -@pytest.mark.asyncio -async def test_list_findings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - )) - response = await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -@pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) - - -def test_list_findings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_findings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - await client.list_findings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_findings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_findings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_findings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListFindingsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_findings( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_findings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - - -def test_list_findings_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_findings(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) -def test_list_findings_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = list(client.list_findings(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_findings_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_findings(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_findings_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_findings), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_findings(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - response = client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - client.list_notification_configs() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - -@pytest.mark.asyncio -async def test_list_notification_configs_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) - - -def test_list_notification_configs_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - await client.list_notification_configs(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_notification_configs_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListNotificationConfigsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) -def test_list_notification_configs_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = list(client.list_notification_configs(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_notification_configs(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_notification_configs(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - response = client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - client.list_sources() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - -@pytest.mark.asyncio -async def test_list_sources_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - )) - response = await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) - assert response.next_page_token == 'next_page_token_value' - - -@pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) - - -def test_list_sources_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_list_sources_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - await client.list_sources(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_list_sources_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_list_sources_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_list_sources_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(securitycenter_service.ListSourcesResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_sources( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata(( - ('parent', ''), - )), - ) - pager = client.list_sources(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__') as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = list(client.list_sources(request={}).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.asyncio -async def test_list_sources_async_pager(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_sources(request={},) - assert async_pager.next_page_token == 'abc' - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - - assert len(responses) == 6 - assert all(isinstance(i, source.Source) - for i in responses) - - -@pytest.mark.asyncio -async def test_list_sources_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_sources), - '__call__', new_callable=mock.AsyncMock) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in (await client.list_sources(request={})).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/spam') - response = client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -def test_run_asset_discovery_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - client.run_asset_discovery() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - -@pytest.mark.asyncio -async def test_run_asset_discovery_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - response = await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) - - -@pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) - - -def test_run_asset_discovery_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = operations_pb2.Operation(name='operations/op') - client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() - - request.parent = 'parent_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(operations_pb2.Operation(name='operations/op')) - await client.run_asset_discovery(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'parent=parent_value', - ) in kw['metadata'] - - -def test_run_asset_discovery_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - - -def test_run_asset_discovery_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.run_asset_discovery), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name='operations/op') - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name='operations/spam') - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.run_asset_discovery( - parent='parent_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = 'parent_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - -@pytest.mark.asyncio -async def test_set_finding_state_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) - - -def test_set_finding_state_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = finding.Finding() - client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() - - request.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'name=name_value', - ) in kw['metadata'] - - -def test_set_finding_state_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - - -def test_set_finding_state_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_finding_state), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_finding_state( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = 'name_value' - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE - assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp(seconds=751) - -@pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - response = client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - client.set_iam_policy() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - -@pytest.mark.asyncio -async def test_set_iam_policy_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy( - version=774, - etag=b'etag_blob', - )) - response = await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -@pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) - - -def test_set_iam_policy_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy(request={ - 'resource': 'resource_value', - 'policy': policy_pb2.Policy(version=774), - 'update_mask': field_mask_pb2.FieldMask(paths=['paths_value']), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - - -def test_set_iam_policy_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.set_iam_policy), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource='resource_value', - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - -@pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - response = client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - -@pytest.mark.asyncio -async def test_test_iam_permissions_async(transport: str = 'grpc_asyncio', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - )) - response = await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) - - -def test_test_iam_permissions_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() - - request.resource = 'resource_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - await client.test_iam_permissions(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'resource=resource_value', - ) in kw['metadata'] - -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions(request={ - 'resource': 'resource_value', - 'permissions': ['permissions_value'], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - - -def test_test_iam_permissions_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(iam_policy_pb2.TestIamPermissionsResponse()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource='resource_value', - permissions=['permissions_value'], - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = 'resource_value' - assert arg == mock_val - arg = args[0].permissions - mock_val = ['permissions_value'] - assert arg == mock_val - -@pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - response = client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_update_finding_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - client.update_finding() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - -@pytest.mark.asyncio -async def test_update_finding_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - )) - response = await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) - - -def test_update_finding_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_finding_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() - - request.finding.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'finding.name=name_value', - ) in kw['metadata'] - - -def test_update_finding_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_finding_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_finding_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_finding), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - response = client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - client.update_notification_config() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - -@pytest.mark.asyncio -async def test_update_notification_config_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - )) - response = await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -@pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) - - -def test_update_notification_config_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() - - request.notification_config.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - await client.update_notification_config(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'notification_config.name=name_value', - ) in kw['metadata'] - - -def test_update_notification_config_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_notification_config_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_notification_config), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_notification_config.NotificationConfig()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - response = client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - client.update_organization_settings() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - -@pytest.mark.asyncio -async def test_update_organization_settings_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - )) - response = await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -@pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) - - -def test_update_organization_settings_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() - - request.organization_settings.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - await client.update_organization_settings(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'organization_settings.name=name_value', - ) in kw['metadata'] - - -def test_update_organization_settings_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - - -def test_update_organization_settings_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_organization_settings), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_organization_settings.OrganizationSettings()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name='name_value') - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - response = client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - client.update_source() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - -@pytest.mark.asyncio -async def test_update_source_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - )) - response = await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) - - -def test_update_source_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = gcs_source.Source() - client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_source_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() - - request.source.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'source.name=name_value', - ) in kw['metadata'] - - -def test_update_source_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_source_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_source_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_source), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_source_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks(request_type, transport: str = 'grpc'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - response = client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - client.update_security_marks() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - -@pytest.mark.asyncio -async def test_update_security_marks_async(transport: str = 'grpc_asyncio', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value =grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - )) - response = await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -@pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) - - -def test_update_security_marks_field_headers(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -@pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Any value that is part of the HTTP/1.1 URI should be sent as - # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() - - request.security_marks.name = 'name_value' - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - await client.update_security_marks(request) - - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == request - - # Establish that the field header was sent. - _, _, kw = call.mock_calls[0] - assert ( - 'x-goog-request-params', - 'security_marks.name=name_value', - ) in kw['metadata'] - - -def test_update_security_marks_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - - -def test_update_security_marks_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_security_marks), - '__call__') as call: - # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_security_marks.SecurityMarks()) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name='name_value') - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=['paths_value']) - assert arg == mock_val - -@pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateSourceRequest, - dict, -]) -def test_create_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_create_source_rest_required_fields(request_type=securitycenter_service.CreateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb(securitycenter_service.CreateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["source"] = {'name': 'name_value', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) - - -def test_create_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_create_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), - parent='parent_value', - source=gcs_source.Source(name='name_value'), - ) - - -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateFindingRequest, - dict, -]) -def test_create_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_create_finding_rest_required_fields(request_type=securitycenter_service.CreateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "findingId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["findingId"] = 'finding_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == 'finding_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_finding(request) - - expected_params = [ - ( - "findingId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("findingId", )) & set(("parent", "findingId", "finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb(securitycenter_service.CreateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.CreateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.create_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request_init["finding"] = {'name': 'name_value', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_finding(request) - - -def test_create_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_create_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent='parent_value', - finding_id='finding_id_value', - finding=gcs_finding.Finding(name='name_value'), - ) - - -def test_create_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.CreateNotificationConfigRequest, - dict, -]) -def test_create_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.create_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_create_notification_config_rest_required_fields(request_type=securitycenter_service.CreateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - assert "configId" not in jsonified_request - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - - jsonified_request["parent"] = 'parent_value' - jsonified_request["configId"] = 'config_id_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "configId" in jsonified_request - assert jsonified_request["configId"] == 'config_id_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.create_notification_config(request) - - expected_params = [ - ( - "configId", - "", - ), - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_create_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("configId", )) & set(("parent", "configId", "notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_create_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_create_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb(securitycenter_service.CreateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.CreateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.create_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_create_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.CreateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request_init["notification_config"] = {'name': 'name_value', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_notification_config(request) - - -def test_create_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.create_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_create_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent='parent_value', - config_id='config_id_value', - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - ) - - -def test_create_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, - dict, -]) -def test_delete_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.delete_notification_config(request) - - # Establish that the response is the type that we expect. - assert response is None - - -def test_delete_notification_config_rest_required_fields(request_type=securitycenter_service.DeleteNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).delete_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = None - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "delete", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.delete_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_delete_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_delete_notification_config") as pre: - pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb(securitycenter_service.DeleteNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - - request = securitycenter_service.DeleteNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - - client.delete_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - - -def test_delete_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.DeleteNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.delete_notification_config(request) - - -def test_delete_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = None - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = '' - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.delete_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_delete_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), - name='name_value', - ) - - -def test_delete_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.GetIamPolicyRequest, - dict, -]) -def test_get_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_get_iam_policy_rest_required_fields(request_type=iam_policy_pb2.GetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.GetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.get_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.GetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_iam_policy(request) - - -def test_get_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1]) - - -def test_get_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_get_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetNotificationConfigRequest, - dict, -]) -def test_get_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_get_notification_config_rest_required_fields(request_type=securitycenter_service.GetNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb(securitycenter_service.GetNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json(notification_config.NotificationConfig()) - - request = securitycenter_service.GetNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() - - client.get_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/notificationConfigs/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_notification_config(request) - - -def test_get_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/notificationConfigs/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_get_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name='name_value', - ) - - -def test_get_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, - dict, -]) -def test_get_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_get_organization_settings_rest_required_fields(request_type=securitycenter_service.GetOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb(securitycenter_service.GetOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json(organization_settings.OrganizationSettings()) - - request = securitycenter_service.GetOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() - - client.get_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/organizationSettings'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_organization_settings(request) - - -def test_get_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/organizationSettings'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_get_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name='name_value', - ) - - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GetSourceRequest, - dict, -]) -def test_get_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.get_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_get_source_rest_required_fields(request_type=securitycenter_service.GetSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).get_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.get_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_get_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_get_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_get_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb(securitycenter_service.GetSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) - - request = securitycenter_service.GetSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = source.Source() - - client.get_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_get_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GetSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.get_source(request) - - -def test_get_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.get_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_get_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name='name_value', - ) - - -def test_get_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupAssetsRequest, - dict, -]) -def test_group_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_assets_rest_required_fields(request_type=securitycenter_service.GroupAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb(securitycenter_service.GroupAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json(securitycenter_service.GroupAssetsResponse()) - - request = securitycenter_service.GroupAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() - - client.group_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_assets(request) - - -def test_group_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.group_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.GroupFindingsRequest, - dict, -]) -def test_group_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.group_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_group_findings_rest_required_fields(request_type=securitycenter_service.GroupFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request_init["group_by"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - jsonified_request["groupBy"] = 'group_by_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).group_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == 'group_by_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.group_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_group_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.group_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", "groupBy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_group_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_group_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb(securitycenter_service.GroupFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupFindingsResponse.to_json(securitycenter_service.GroupFindingsResponse()) - - request = securitycenter_service.GroupFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() - - client.group_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_group_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.GroupFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.group_findings(request) - - -def test_group_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - group_by='group_by_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.group_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1]) - - -def test_group_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent='parent_value', - group_by='group_by_value', - ) - - -def test_group_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token='abc', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token='def', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.GroupFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.group_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) - for i in results) - - pages = list(client.group_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListAssetsRequest, - dict, -]) -def test_list_assets_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_assets(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_assets_rest_required_fields(request_type=securitycenter_service.ListAssetsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_assets._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_assets(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_assets_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_assets._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_assets") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_assets") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb(securitycenter_service.ListAssetsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json(securitycenter_service.ListAssetsResponse()) - - request = securitycenter_service.ListAssetsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() - - client.list_assets(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_assets_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListAssetsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) - - -def test_list_assets_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_assets(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets" % client.transport._host, args[1]) - - -def test_list_assets_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_assets( - securitycenter_service.ListAssetsRequest(), - parent='parent_value', - ) - - -def test_list_assets_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], - next_page_token='def', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListAssetsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_assets(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results) - - pages = list(client.list_assets(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListFindingsRequest, - dict, -]) -def test_list_findings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( - next_page_token='next_page_token_value', - total_size=1086, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_findings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) - assert response.next_page_token == 'next_page_token_value' - assert response.total_size == 1086 - - -def test_list_findings_rest_required_fields(request_type=securitycenter_service.ListFindingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_findings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("compare_duration", "field_mask", "filter", "order_by", "page_size", "page_token", "read_time", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_findings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("compareDuration", "fieldMask", "filter", "orderBy", "pageSize", "pageToken", "readTime", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_findings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_findings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb(securitycenter_service.ListFindingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json(securitycenter_service.ListFindingsResponse()) - - request = securitycenter_service.ListFindingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() - - client.list_findings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_findings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListFindingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_findings(request) - - -def test_list_findings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_findings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*/sources/*}/findings" % client.transport._host, args[1]) - - -def test_list_findings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_findings( - securitycenter_service.ListFindingsRequest(), - parent='parent_value', - ) - - -def test_list_findings_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='abc', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], - next_page_token='def', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListFindingsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1/sources/sample2'} - - pager = client.list_findings(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.ListFindingsResponse.ListFindingsResult) - for i in results) - - pages = list(client.list_findings(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListNotificationConfigsRequest, - dict, -]) -def test_list_notification_configs_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_notification_configs(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_notification_configs_rest_required_fields(request_type=securitycenter_service.ListNotificationConfigsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_notification_configs._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_notification_configs(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_notification_configs_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_notification_configs") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_notification_configs") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb(securitycenter_service.ListNotificationConfigsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListNotificationConfigsResponse.to_json(securitycenter_service.ListNotificationConfigsResponse()) - - request = securitycenter_service.ListNotificationConfigsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() - - client.list_notification_configs(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_notification_configs_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListNotificationConfigsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_notification_configs(request) - - -def test_list_notification_configs_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_notification_configs(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/notificationConfigs" % client.transport._host, args[1]) - - -def test_list_notification_configs_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent='parent_value', - ) - - -def test_list_notification_configs_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token='abc', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token='def', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListNotificationConfigsResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_notification_configs(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, notification_config.NotificationConfig) - for i in results) - - pages = list(client.list_notification_configs(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.ListSourcesRequest, - dict, -]) -def test_list_sources_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token='next_page_token_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.list_sources(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == 'next_page_token_value' - - -def test_list_sources_rest_required_fields(request_type=securitycenter_service.ListSourcesRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("page_size", "page_token", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "get", - 'query_params': pb_request, - } - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.list_sources(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_list_sources_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == (set(("pageSize", "pageToken", )) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_list_sources") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_list_sources") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb(securitycenter_service.ListSourcesRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json(securitycenter_service.ListSourcesResponse()) - - request = securitycenter_service.ListSourcesRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() - - client.list_sources(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_list_sources_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.ListSourcesRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_sources(request) - - -def test_list_sources_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.list_sources(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/sources" % client.transport._host, args[1]) - - -def test_list_sources_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), - parent='parent_value', - ) - - -def test_list_sources_rest_pager(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - #with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token='abc', - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token='def', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token='ghi', - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple(securitycenter_service.ListSourcesResponse.to_json(x) for x in response) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode('UTF-8') - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {'parent': 'organizations/sample1'} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) - for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ['abc','def','ghi', '']): - assert page_.raw_page.next_page_token == token - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, - dict, -]) -def test_run_asset_discovery_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.run_asset_discovery(request) - - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" - - -def test_run_asset_discovery_rest_required_fields(request_type=securitycenter_service.RunAssetDiscoveryRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["parent"] = 'parent_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).run_asset_discovery._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == 'parent_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.run_asset_discovery(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_run_asset_discovery_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(operation.Operation, "_set_result_from_operation"), \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_run_asset_discovery") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb(securitycenter_service.RunAssetDiscoveryRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(operations_pb2.Operation()) - - request = securitycenter_service.RunAssetDiscoveryRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.run_asset_discovery(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_run_asset_discovery_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.RunAssetDiscoveryRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'parent': 'organizations/sample1'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.run_asset_discovery(request) - - -def test_run_asset_discovery_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name='operations/spam') - - # get arguments that satisfy an http rule for this method - sample_request = {'parent': 'organizations/sample1'} - - # get truthy value for each flattened field - mock_args = dict( - parent='parent_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.run_asset_discovery(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{parent=organizations/*}/assets:runDiscovery" % client.transport._host, args[1]) - - -def test_run_asset_discovery_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent='parent_value', - ) - - -def test_run_asset_discovery_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.SetFindingStateRequest, - dict, -]) -def test_set_finding_state_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_finding_state(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_set_finding_state_rest_required_fields(request_type=securitycenter_service.SetFindingStateRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["name"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["name"] = 'name_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_finding_state._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == 'name_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_finding_state(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_finding_state_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_finding_state._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name", "state", "startTime", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_finding_state") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_finding_state") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb(securitycenter_service.SetFindingStateRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) - - request = securitycenter_service.SetFindingStateRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = finding.Finding() - - client.set_finding_state(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_finding_state_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.SetFindingStateRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_finding_state(request) - - -def test_set_finding_state_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'name': 'organizations/sample1/sources/sample2/findings/sample3'} - - # get truthy value for each flattened field - mock_args = dict( - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_finding_state(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1]) - - -def test_set_finding_state_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name='name_value', - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), - ) - - -def test_set_finding_state_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.SetIamPolicyRequest, - dict, -]) -def test_set_iam_policy_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b'etag_blob', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.set_iam_policy(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b'etag_blob' - - -def test_set_iam_policy_rest_required_fields(request_type=iam_policy_pb2.SetIamPolicyRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).set_iam_policy._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.set_iam_policy(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_set_iam_policy_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "policy", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_set_iam_policy") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_set_iam_policy") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - - request = iam_policy_pb2.SetIamPolicyRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() - - client.set_iam_policy(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_set_iam_policy_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.SetIamPolicyRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.set_iam_policy(request) - - -def test_set_iam_policy_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.set_iam_policy(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1]) - - -def test_set_iam_policy_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource='resource_value', - ) - - -def test_set_iam_policy_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, -]) -def test_test_iam_permissions_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=['permissions_value'], - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.test_iam_permissions(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ['permissions_value'] - - -def test_test_iam_permissions_rest_required_fields(request_type=iam_policy_pb2.TestIamPermissionsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" - request = request_type(**request_init) - pb_request = request - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - jsonified_request["resource"] = 'resource_value' - jsonified_request["permissions"] = 'permissions_value' - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).test_iam_permissions._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == 'resource_value' - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == 'permissions_value' - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "post", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.test_iam_permissions(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_test_iam_permissions_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource", "permissions", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_test_iam_permissions") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(iam_policy_pb2.TestIamPermissionsResponse()) - - request = iam_policy_pb2.TestIamPermissionsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - - client.test_iam_permissions(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_test_iam_permissions_rest_bad_request(transport: str = 'rest', request_type=iam_policy_pb2.TestIamPermissionsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'resource': 'organizations/sample1/sources/sample2'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.test_iam_permissions(request) - - -def test_test_iam_permissions_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() - - # get arguments that satisfy an http rule for this method - sample_request = {'resource': 'organizations/sample1/sources/sample2'} - - # get truthy value for each flattened field - mock_args = dict( - resource='resource_value', - permissions=['permissions_value'], - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = return_value - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.test_iam_permissions(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1]) - - -def test_test_iam_permissions_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource='resource_value', - permissions=['permissions_value'], - ) - - -def test_test_iam_permissions_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateFindingRequest, - dict, -]) -def test_update_finding_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name='name_value', - parent='parent_value', - resource_name='resource_name_value', - state=gcs_finding.Finding.State.ACTIVE, - category='category_value', - external_uri='external_uri_value', - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_finding(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == 'name_value' - assert response.parent == 'parent_value' - assert response.resource_name == 'resource_name_value' - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == 'category_value' - assert response.external_uri == 'external_uri_value' - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == 'canonical_name_value' - - -def test_update_finding_rest_required_fields(request_type=securitycenter_service.UpdateFindingRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_finding(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("finding", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_finding") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_finding") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb(securitycenter_service.UpdateFindingRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateFindingRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - request_init["finding"] = {'name': 'organizations/sample1/sources/sample2/findings/sample3', 'parent': 'parent_value', 'resource_name': 'resource_name_value', 'state': 1, 'category': 'category_value', 'external_uri': 'external_uri_value', 'source_properties': {}, 'security_marks': {'name': 'name_value', 'marks': {}, 'canonical_name': 'canonical_name_value'}, 'event_time': {'seconds': 751, 'nanos': 543}, 'create_time': {}, 'severity': 1, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_finding(request) - - -def test_update_finding_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - - # get arguments that satisfy an http rule for this method - sample_request = {'finding': {'name': 'organizations/sample1/sources/sample2/findings/sample3'}} - - # get truthy value for each flattened field - mock_args = dict( - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_finding(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{finding.name=organizations/*/sources/*/findings/*}" % client.transport._host, args[1]) - - -def test_update_finding_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_finding_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, - dict, -]) -def test_update_notification_config_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( - name='name_value', - description='description_value', - event_type=gcs_notification_config.NotificationConfig.EventType.FINDING, - pubsub_topic='pubsub_topic_value', - service_account='service_account_value', - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig(filter='filter_value'), - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_notification_config(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == 'name_value' - assert response.description == 'description_value' - assert response.event_type == gcs_notification_config.NotificationConfig.EventType.FINDING - assert response.pubsub_topic == 'pubsub_topic_value' - assert response.service_account == 'service_account_value' - - -def test_update_notification_config_rest_required_fields(request_type=securitycenter_service.UpdateNotificationConfigRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_notification_config(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_notification_config_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("notificationConfig", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_notification_config") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_notification_config") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb(securitycenter_service.UpdateNotificationConfigRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json(gcs_notification_config.NotificationConfig()) - - request = securitycenter_service.UpdateNotificationConfigRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() - - client.update_notification_config(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_notification_config_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateNotificationConfigRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - request_init["notification_config"] = {'name': 'organizations/sample1/notificationConfigs/sample2', 'description': 'description_value', 'event_type': 1, 'pubsub_topic': 'pubsub_topic_value', 'service_account': 'service_account_value', 'streaming_config': {'filter': 'filter_value'}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_notification_config(request) - - -def test_update_notification_config_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {'notification_config': {'name': 'organizations/sample1/notificationConfigs/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_notification_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1]) - - -def test_update_notification_config_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_notification_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, - dict, -]) -def test_update_organization_settings_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( - name='name_value', - enable_asset_discovery=True, - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_organization_settings(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) - assert response.name == 'name_value' - assert response.enable_asset_discovery is True - - -def test_update_organization_settings_rest_required_fields(request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_organization_settings._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_organization_settings(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_organization_settings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("organizationSettings", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_organization_settings") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_organization_settings") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb(securitycenter_service.UpdateOrganizationSettingsRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_organization_settings.OrganizationSettings.to_json(gcs_organization_settings.OrganizationSettings()) - - request = securitycenter_service.UpdateOrganizationSettingsRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() - - client.update_organization_settings(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_organization_settings_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateOrganizationSettingsRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - request_init["organization_settings"] = {'name': 'organizations/sample1/organizationSettings', 'enable_asset_discovery': True, 'asset_discovery_config': {'project_ids': ['project_ids_value1', 'project_ids_value2'], 'inclusion_mode': 1, 'folder_ids': ['folder_ids_value1', 'folder_ids_value2']}} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_organization_settings(request) - - -def test_update_organization_settings_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {'organization_settings': {'name': 'organizations/sample1/organizationSettings'}} - - # get truthy value for each flattened field - mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_organization_settings(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1]) - - -def test_update_organization_settings_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings(name='name_value'), - ) - - -def test_update_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSourceRequest, - dict, -]) -def test_update_source_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( - name='name_value', - display_name='display_name_value', - description='description_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_source(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) - assert response.name == 'name_value' - assert response.display_name == 'display_name_value' - assert response.description == 'description_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_source_rest_required_fields(request_type=securitycenter_service.UpdateSourceRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_source._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_source(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask", )) & set(("source", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_source") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_source") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSourceRequest.pb(securitycenter_service.UpdateSourceRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.UpdateSourceRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.update_source(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_source_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSourceRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'source': {'name': 'organizations/sample1/sources/sample2'}} - request_init["source"] = {'name': 'organizations/sample1/sources/sample2', 'display_name': 'display_name_value', 'description': 'description_value', 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_source(request) - - -def test_update_source_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {'source': {'name': 'organizations/sample1/sources/sample2'}} - - # get truthy value for each flattened field - mock_args = dict( - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_source(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{source.name=organizations/*/sources/*}" % client.transport._host, args[1]) - - -def test_update_source_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -@pytest.mark.parametrize("request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, - dict, -]) -def test_update_security_marks_rest(request_type): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks( - name='name_value', - canonical_name='canonical_name_value', - ) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - response = client.update_security_marks(request) - - # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) - assert response.name == 'name_value' - assert response.canonical_name == 'canonical_name_value' - - -def test_update_security_marks_rest_required_fields(request_type=securitycenter_service.UpdateSecurityMarksRequest): - transport_class = transports.SecurityCenterRestTransport - - request_init = {} - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads(json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False - )) - - # verify fields with default values are dropped - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - - # verify required fields with default values are now present - - unset_fields = transport_class(credentials=ga_credentials.AnonymousCredentials()).update_security_marks._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("start_time", "update_mask", )) - jsonified_request.update(unset_fields) - - # verify required fields with non-default values are left alone - - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, 'request') as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, 'transcode') as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - 'uri': 'v1/sample_method', - 'method': "patch", - 'query_params': pb_request, - } - transcode_result['body'] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - response = client.update_security_marks(request) - - expected_params = [ - ('$alt', 'json;enum-encoding=int') - ] - actual_params = req.call_args.kwargs['params'] - assert expected_params == actual_params - - -def test_update_security_marks_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport(credentials=ga_credentials.AnonymousCredentials) - - unset_fields = transport.update_security_marks._get_unset_required_fields({}) - assert set(unset_fields) == (set(("startTime", "updateMask", )) & set(("securityMarks", ))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_security_marks_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None if null_interceptor else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object(type(client.transport._session), "request") as req, \ - mock.patch.object(path_template, "transcode") as transcode, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "post_update_security_marks") as post, \ - mock.patch.object(transports.SecurityCenterRestInterceptor, "pre_update_security_marks") as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateSecurityMarksRequest.pb(securitycenter_service.UpdateSecurityMarksRequest()) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_security_marks.SecurityMarks.to_json(gcs_security_marks.SecurityMarks()) - - request = securitycenter_service.UpdateSecurityMarksRequest() - metadata =[ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_security_marks.SecurityMarks() - - client.update_security_marks(request, metadata=[("key", "val"), ("cephalopod", "squid"),]) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_security_marks_rest_bad_request(transport: str = 'rest', request_type=securitycenter_service.UpdateSecurityMarksRequest): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - request_init["security_marks"] = {'name': 'organizations/sample1/assets/sample2/securityMarks', 'marks': {}, 'canonical_name': 'canonical_name_value'} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, 'request') as req, pytest.raises(core_exceptions.BadRequest): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_security_marks(request) - - -def test_update_security_marks_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), 'request') as req: - # Designate an appropriate value for the returned response. - return_value = gcs_security_marks.SecurityMarks() - - # get arguments that satisfy an http rule for this method - sample_request = {'security_marks': {'name': 'organizations/sample1/assets/sample2/securityMarks'}} - - # get truthy value for each flattened field - mock_args = dict( - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_security_marks.SecurityMarks.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode('UTF-8') - req.return_value = response_value - - client.update_security_marks(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate("%s/v1p1beta1/{security_marks.name=organizations/*/assets/*/securityMarks}" % client.transport._host, args[1]) - - -def test_update_security_marks_rest_flattened_error(transport: str = 'rest'): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name='name_value'), - update_mask=field_mask_pb2.FieldMask(paths=['paths_value']), - ) - - -def test_update_security_marks_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest' - ) - - -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, - ) - - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - transport=transport, - ) - - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options=options, - credentials=ga_credentials.AnonymousCredentials() - ) - - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityCenterClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) - - -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - client = SecurityCenterClient(transport=transport) - assert client.transport is transport - -def test_transport_get_channel(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityCenterGrpcTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - - transport = transports.SecurityCenterGrpcAsyncIOTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - channel = transport.grpc_channel - assert channel - -@pytest.mark.parametrize("transport_class", [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, -]) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "rest", -]) -def test_transport_kind(transport_name): - transport = SecurityCenterClient.get_transport_class(transport_name)( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert transport.kind == transport_name - -def test_transport_grpc_default(): - # A client should use the gRPC transport by default. - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - assert isinstance( - client.transport, - transports.SecurityCenterGrpcTransport, - ) - -def test_security_center_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json" - ) - - -def test_security_center_base_transport(): - # Instantiate the base transport. - with mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport.__init__') as Transport: - Transport.return_value = None - transport = transports.SecurityCenterTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - 'create_source', - 'create_finding', - 'create_notification_config', - 'delete_notification_config', - 'get_iam_policy', - 'get_notification_config', - 'get_organization_settings', - 'get_source', - 'group_assets', - 'group_findings', - 'list_assets', - 'list_findings', - 'list_notification_configs', - 'list_sources', - 'run_asset_discovery', - 'set_finding_state', - 'set_iam_policy', - 'test_iam_permissions', - 'update_finding', - 'update_notification_config', - 'update_organization_settings', - 'update_source', - 'update_security_marks', - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) - - with pytest.raises(NotImplementedError): - transport.close() - - # Additionally, the LRO client (a property) should - # also raise NotImplementedError - with pytest.raises(NotImplementedError): - transport.operations_client - - # Catch all for all remaining methods and properties - remainder = [ - 'kind', - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() - - -def test_security_center_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object(google.auth, 'load_credentials_from_file', autospec=True) as load_creds, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport( - credentials_file="credentials.json", - quota_project_id="octopus", - ) - load_creds.assert_called_once_with("credentials.json", - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id="octopus", - ) - - -def test_security_center_base_transport_with_adc(): - # Test the default credentials are used if credentials and credentials_file are None. - with mock.patch.object(google.auth, 'default', autospec=True) as adc, mock.patch('google.cloud.securitycenter_v1p1beta1.services.security_center.transports.SecurityCenterTransport._prep_wrapped_messages') as Transport: - Transport.return_value = None - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.SecurityCenterTransport() - adc.assert_called_once() - - -def test_security_center_auth_adc(): - # If no credentials are provided, we should use ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - SecurityCenterClient() - adc.assert_called_once_with( - scopes=None, - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - quota_project_id=None, - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - ], -) -def test_security_center_transport_auth_adc(transport_class): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class(quota_project_id="octopus", scopes=["1", "2"]) - adc.assert_called_once_with( - scopes=["1", "2"], - default_scopes=( 'https://www.googleapis.com/auth/cloud-platform',), - quota_project_id="octopus", - ) - - -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityCenterGrpcTransport, - transports.SecurityCenterGrpcAsyncIOTransport, - transports.SecurityCenterRestTransport, - ], -) -def test_security_center_transport_auth_gdch_credentials(transport_class): - host = 'https://language.com' - api_audience_tests = [None, 'https://language2.com'] - api_audience_expect = [host, 'https://language2.com'] - for t, e in zip(api_audience_tests, api_audience_expect): - with mock.patch.object(google.auth, 'default', autospec=True) as adc: - gdch_mock = mock.MagicMock() - type(gdch_mock).with_gdch_audience = mock.PropertyMock(return_value=gdch_mock) - adc.return_value = (gdch_mock, None) - transport_class(host=host, api_audience=t) - gdch_mock.with_gdch_audience.assert_called_once_with( - e - ) - - -@pytest.mark.parametrize( - "transport_class,grpc_helpers", - [ - (transports.SecurityCenterGrpcTransport, grpc_helpers), - (transports.SecurityCenterGrpcAsyncIOTransport, grpc_helpers_async) - ], -) -def test_security_center_transport_create_channel(transport_class, grpc_helpers): - # If credentials and host are not provided, the transport class should use - # ADC credentials. - with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch.object( - grpc_helpers, "create_channel", autospec=True - ) as create_channel: - creds = ga_credentials.AnonymousCredentials() - adc.return_value = (creds, None) - transport_class( - quota_project_id="octopus", - scopes=["1", "2"] - ) - - create_channel.assert_called_with( - "securitycenter.googleapis.com:443", - credentials=creds, - credentials_file=None, - quota_project_id="octopus", - default_scopes=( - 'https://www.googleapis.com/auth/cloud-platform', -), - scopes=["1", "2"], - default_host="securitycenter.googleapis.com", - ssl_credentials=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_grpc_transport_client_cert_source_for_mtls( - transport_class -): - cred = ga_credentials.AnonymousCredentials() - - # Check ssl_channel_credentials is used if provided. - with mock.patch.object(transport_class, "create_channel") as mock_create_channel: - mock_ssl_channel_creds = mock.Mock() - transport_class( - host="squid.clam.whelk", - credentials=cred, - ssl_channel_credentials=mock_ssl_channel_creds - ) - mock_create_channel.assert_called_once_with( - "squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_channel_creds, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - - # Check if ssl_channel_credentials is not provided, then client_cert_source_for_mtls - # is used. - with mock.patch.object(transport_class, "create_channel", return_value=mock.Mock()): - with mock.patch("grpc.ssl_channel_credentials") as mock_ssl_cred: - transport_class( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - expected_cert, expected_key = client_cert_source_callback() - mock_ssl_cred.assert_called_once_with( - certificate_chain=expected_cert, - private_key=expected_key - ) - -def test_security_center_http_transport_client_cert_source_for_mtls(): - cred = ga_credentials.AnonymousCredentials() - with mock.patch("google.auth.transport.requests.AuthorizedSession.configure_mtls_channel") as mock_configure_mtls_channel: - transports.SecurityCenterRestTransport ( - credentials=cred, - client_cert_source_for_mtls=client_cert_source_callback - ) - mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) - - -def test_security_center_rest_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='rest', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.AbstractOperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_no_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:443' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com' - ) - -@pytest.mark.parametrize("transport_name", [ - "grpc", - "grpc_asyncio", - "rest", -]) -def test_security_center_host_with_port(transport_name): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_options=client_options.ClientOptions(api_endpoint='securitycenter.googleapis.com:8000'), - transport=transport_name, - ) - assert client.transport._host == ( - 'securitycenter.googleapis.com:8000' - if transport_name in ['grpc', 'grpc_asyncio'] - else 'https://securitycenter.googleapis.com:8000' - ) - -@pytest.mark.parametrize("transport_name", [ - "rest", -]) -def test_security_center_client_transport_session_collision(transport_name): - creds1 = ga_credentials.AnonymousCredentials() - creds2 = ga_credentials.AnonymousCredentials() - client1 = SecurityCenterClient( - credentials=creds1, - transport=transport_name, - ) - client2 = SecurityCenterClient( - credentials=creds2, - transport=transport_name, - ) - session1 = client1.transport.create_source._session - session2 = client2.transport.create_source._session - assert session1 != session2 - session1 = client1.transport.create_finding._session - session2 = client2.transport.create_finding._session - assert session1 != session2 - session1 = client1.transport.create_notification_config._session - session2 = client2.transport.create_notification_config._session - assert session1 != session2 - session1 = client1.transport.delete_notification_config._session - session2 = client2.transport.delete_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_iam_policy._session - session2 = client2.transport.get_iam_policy._session - assert session1 != session2 - session1 = client1.transport.get_notification_config._session - session2 = client2.transport.get_notification_config._session - assert session1 != session2 - session1 = client1.transport.get_organization_settings._session - session2 = client2.transport.get_organization_settings._session - assert session1 != session2 - session1 = client1.transport.get_source._session - session2 = client2.transport.get_source._session - assert session1 != session2 - session1 = client1.transport.group_assets._session - session2 = client2.transport.group_assets._session - assert session1 != session2 - session1 = client1.transport.group_findings._session - session2 = client2.transport.group_findings._session - assert session1 != session2 - session1 = client1.transport.list_assets._session - session2 = client2.transport.list_assets._session - assert session1 != session2 - session1 = client1.transport.list_findings._session - session2 = client2.transport.list_findings._session - assert session1 != session2 - session1 = client1.transport.list_notification_configs._session - session2 = client2.transport.list_notification_configs._session - assert session1 != session2 - session1 = client1.transport.list_sources._session - session2 = client2.transport.list_sources._session - assert session1 != session2 - session1 = client1.transport.run_asset_discovery._session - session2 = client2.transport.run_asset_discovery._session - assert session1 != session2 - session1 = client1.transport.set_finding_state._session - session2 = client2.transport.set_finding_state._session - assert session1 != session2 - session1 = client1.transport.set_iam_policy._session - session2 = client2.transport.set_iam_policy._session - assert session1 != session2 - session1 = client1.transport.test_iam_permissions._session - session2 = client2.transport.test_iam_permissions._session - assert session1 != session2 - session1 = client1.transport.update_finding._session - session2 = client2.transport.update_finding._session - assert session1 != session2 - session1 = client1.transport.update_notification_config._session - session2 = client2.transport.update_notification_config._session - assert session1 != session2 - session1 = client1.transport.update_organization_settings._session - session2 = client2.transport.update_organization_settings._session - assert session1 != session2 - session1 = client1.transport.update_source._session - session2 = client2.transport.update_source._session - assert session1 != session2 - session1 = client1.transport.update_security_marks._session - session2 = client2.transport.update_security_marks._session - assert session1 != session2 -def test_security_center_grpc_transport_channel(): - channel = grpc.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -def test_security_center_grpc_asyncio_transport_channel(): - channel = aio.secure_channel('http://localhost/', grpc.local_channel_credentials()) - - # Check that channel is used if provided. - transport = transports.SecurityCenterGrpcAsyncIOTransport( - host="squid.clam.whelk", - channel=channel, - ) - assert transport.grpc_channel == channel - assert transport._host == "squid.clam.whelk:443" - assert transport._ssl_channel_credentials == None - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_client_cert_source( - transport_class -): - with mock.patch("grpc.ssl_channel_credentials", autospec=True) as grpc_ssl_channel_cred: - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_ssl_cred = mock.Mock() - grpc_ssl_channel_cred.return_value = mock_ssl_cred - - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - - cred = ga_credentials.AnonymousCredentials() - with pytest.warns(DeprecationWarning): - with mock.patch.object(google.auth, 'default') as adc: - adc.return_value = (cred, None) - transport = transport_class( - host="squid.clam.whelk", - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=client_cert_source_callback, - ) - adc.assert_called_once() - - grpc_ssl_channel_cred.assert_called_once_with( - certificate_chain=b"cert bytes", private_key=b"key bytes" - ) - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - assert transport._ssl_channel_credentials == mock_ssl_cred - - -# Remove this test when deprecated arguments (api_mtls_endpoint, client_cert_source) are -# removed from grpc/grpc_asyncio transport constructor. -@pytest.mark.parametrize("transport_class", [transports.SecurityCenterGrpcTransport, transports.SecurityCenterGrpcAsyncIOTransport]) -def test_security_center_transport_channel_mtls_with_adc( - transport_class -): - mock_ssl_cred = mock.Mock() - with mock.patch.multiple( - "google.auth.transport.grpc.SslCredentials", - __init__=mock.Mock(return_value=None), - ssl_credentials=mock.PropertyMock(return_value=mock_ssl_cred), - ): - with mock.patch.object(transport_class, "create_channel") as grpc_create_channel: - mock_grpc_channel = mock.Mock() - grpc_create_channel.return_value = mock_grpc_channel - mock_cred = mock.Mock() - - with pytest.warns(DeprecationWarning): - transport = transport_class( - host="squid.clam.whelk", - credentials=mock_cred, - api_mtls_endpoint="mtls.squid.clam.whelk", - client_cert_source=None, - ) - - grpc_create_channel.assert_called_once_with( - "mtls.squid.clam.whelk:443", - credentials=mock_cred, - credentials_file=None, - scopes=None, - ssl_credentials=mock_ssl_cred, - quota_project_id=None, - options=[ - ("grpc.max_send_message_length", -1), - ("grpc.max_receive_message_length", -1), - ], - ) - assert transport.grpc_channel == mock_grpc_channel - - -def test_security_center_grpc_lro_client(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_security_center_grpc_lro_async_client(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport='grpc_asyncio', - ) - transport = client.transport - - # Ensure that we have a api-core operations client. - assert isinstance( - transport.operations_client, - operations_v1.OperationsAsyncClient, - ) - - # Ensure that subsequent calls to the property send the exact same object. - assert transport.operations_client is transport.operations_client - - -def test_asset_path(): - organization = "squid" - asset = "clam" - expected = "organizations/{organization}/assets/{asset}".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.asset_path(organization, asset) - assert expected == actual - - -def test_parse_asset_path(): - expected = { - "organization": "whelk", - "asset": "octopus", - } - path = SecurityCenterClient.asset_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_asset_path(path) - assert expected == actual - -def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" - expected = "organizations/{organization}/sources/{source}/findings/{finding}".format(organization=organization, source=source, finding=finding, ) - actual = SecurityCenterClient.finding_path(organization, source, finding) - assert expected == actual - - -def test_parse_finding_path(): - expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", - } - path = SecurityCenterClient.finding_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_finding_path(path) - assert expected == actual - -def test_notification_config_path(): - organization = "scallop" - notification_config = "abalone" - expected = "organizations/{organization}/notificationConfigs/{notification_config}".format(organization=organization, notification_config=notification_config, ) - actual = SecurityCenterClient.notification_config_path(organization, notification_config) - assert expected == actual - - -def test_parse_notification_config_path(): - expected = { - "organization": "squid", - "notification_config": "clam", - } - path = SecurityCenterClient.notification_config_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_notification_config_path(path) - assert expected == actual - -def test_organization_settings_path(): - organization = "whelk" - expected = "organizations/{organization}/organizationSettings".format(organization=organization, ) - actual = SecurityCenterClient.organization_settings_path(organization) - assert expected == actual - - -def test_parse_organization_settings_path(): - expected = { - "organization": "octopus", - } - path = SecurityCenterClient.organization_settings_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_organization_settings_path(path) - assert expected == actual - -def test_security_marks_path(): - organization = "oyster" - asset = "nudibranch" - expected = "organizations/{organization}/assets/{asset}/securityMarks".format(organization=organization, asset=asset, ) - actual = SecurityCenterClient.security_marks_path(organization, asset) - assert expected == actual - - -def test_parse_security_marks_path(): - expected = { - "organization": "cuttlefish", - "asset": "mussel", - } - path = SecurityCenterClient.security_marks_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_security_marks_path(path) - assert expected == actual - -def test_source_path(): - organization = "winkle" - source = "nautilus" - expected = "organizations/{organization}/sources/{source}".format(organization=organization, source=source, ) - actual = SecurityCenterClient.source_path(organization, source) - assert expected == actual - - -def test_parse_source_path(): - expected = { - "organization": "scallop", - "source": "abalone", - } - path = SecurityCenterClient.source_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_source_path(path) - assert expected == actual - -def test_topic_path(): - project = "squid" - topic = "clam" - expected = "projects/{project}/topics/{topic}".format(project=project, topic=topic, ) - actual = SecurityCenterClient.topic_path(project, topic) - assert expected == actual - - -def test_parse_topic_path(): - expected = { - "project": "whelk", - "topic": "octopus", - } - path = SecurityCenterClient.topic_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_topic_path(path) - assert expected == actual - -def test_common_billing_account_path(): - billing_account = "oyster" - expected = "billingAccounts/{billing_account}".format(billing_account=billing_account, ) - actual = SecurityCenterClient.common_billing_account_path(billing_account) - assert expected == actual - - -def test_parse_common_billing_account_path(): - expected = { - "billing_account": "nudibranch", - } - path = SecurityCenterClient.common_billing_account_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_billing_account_path(path) - assert expected == actual - -def test_common_folder_path(): - folder = "cuttlefish" - expected = "folders/{folder}".format(folder=folder, ) - actual = SecurityCenterClient.common_folder_path(folder) - assert expected == actual - - -def test_parse_common_folder_path(): - expected = { - "folder": "mussel", - } - path = SecurityCenterClient.common_folder_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_folder_path(path) - assert expected == actual - -def test_common_organization_path(): - organization = "winkle" - expected = "organizations/{organization}".format(organization=organization, ) - actual = SecurityCenterClient.common_organization_path(organization) - assert expected == actual - - -def test_parse_common_organization_path(): - expected = { - "organization": "nautilus", - } - path = SecurityCenterClient.common_organization_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_organization_path(path) - assert expected == actual - -def test_common_project_path(): - project = "scallop" - expected = "projects/{project}".format(project=project, ) - actual = SecurityCenterClient.common_project_path(project) - assert expected == actual - - -def test_parse_common_project_path(): - expected = { - "project": "abalone", - } - path = SecurityCenterClient.common_project_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_project_path(path) - assert expected == actual - -def test_common_location_path(): - project = "squid" - location = "clam" - expected = "projects/{project}/locations/{location}".format(project=project, location=location, ) - actual = SecurityCenterClient.common_location_path(project, location) - assert expected == actual - - -def test_parse_common_location_path(): - expected = { - "project": "whelk", - "location": "octopus", - } - path = SecurityCenterClient.common_location_path(**expected) - - # Check that the path construction is reversible. - actual = SecurityCenterClient.parse_common_location_path(path) - assert expected == actual - - -def test_client_with_default_client_info(): - client_info = gapic_v1.client_info.ClientInfo() - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - - with mock.patch.object(transports.SecurityCenterTransport, '_prep_wrapped_messages') as prep: - transport_class = SecurityCenterClient.get_transport_class() - transport = transport_class( - credentials=ga_credentials.AnonymousCredentials(), - client_info=client_info, - ) - prep.assert_called_once_with(client_info) - -@pytest.mark.asyncio -async def test_transport_close_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc_asyncio", - ) - with mock.patch.object(type(getattr(client.transport, "grpc_channel")), "close") as close: - async with client: - close.assert_not_called() - close.assert_called_once() - - -def test_transport_close(): - transports = { - "rest": "_session", - "grpc": "_grpc_channel", - } - - for transport, close_name in transports.items(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - with mock.patch.object(type(getattr(client.transport, close_name)), "close") as close: - with client: - close.assert_not_called() - close.assert_called_once() - -def test_client_ctx(): - transports = [ - 'rest', - 'grpc', - ] - for transport in transports: - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport - ) - # Test client calls underlying transport. - with mock.patch.object(type(client.transport), "close") as close: - close.assert_not_called() - with client: - pass - close.assert_called() - -@pytest.mark.parametrize("client_class,transport_class", [ - (SecurityCenterClient, transports.SecurityCenterGrpcTransport), - (SecurityCenterAsyncClient, transports.SecurityCenterGrpcAsyncIOTransport), -]) -def test_api_key_credentials(client_class, transport_class): - with mock.patch.object( - google.auth._default, "get_api_key_credentials", create=True - ) as get_api_key_credentials: - mock_cred = mock.Mock() - get_api_key_credentials.return_value = mock_cred - options = client_options.ClientOptions() - options.api_key = "api_key" - with mock.patch.object(transport_class, "__init__") as patched: - patched.return_value = None - client = client_class(client_options=options) - patched.assert_called_once_with( - credentials=mock_cred, - credentials_file=None, - host=client.DEFAULT_ENDPOINT, - scopes=None, - client_cert_source_for_mtls=None, - quota_project_id=None, - client_info=transports.base.DEFAULT_CLIENT_INFO, - always_use_jwt_access=True, - api_audience=None, - ) diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py b/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py diff --git a/owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py b/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py similarity index 100% rename from owl-bot-staging/v1/samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py rename to samples/generated_samples/securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json index 38463d21..ec678e1a 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { @@ -880,6 +880,175 @@ ], "title": "securitycenter_v1_generated_security_center_create_notification_config_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.create_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.CreateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "CreateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.CreateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "create_security_health_analytics_custom_module" + }, + "description": "Sample for CreateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_CreateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_create_security_health_analytics_custom_module_sync.py" + }, { "canonical": true, "clientMethod": { @@ -1522,19 +1691,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.delete_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetBigQueryExport" + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1553,22 +1722,21 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" + "shortName": "delete_security_health_analytics_custom_module" }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_async", "segments": [ { - "end": 51, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 49, "start": 27, "type": "SHORT" }, @@ -1583,17 +1751,15 @@ "type": "REQUEST_INITIALIZATION" }, { - "end": 48, "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_async.py" }, { "canonical": true, @@ -1602,19 +1768,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.delete_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.DeleteSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetBigQueryExport" + "shortName": "DeleteSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" + "type": "google.cloud.securitycenter_v1.types.DeleteSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1633,22 +1799,21 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", - "shortName": "get_big_query_export" + "shortName": "delete_security_health_analytics_custom_module" }, - "description": "Sample for GetBigQueryExport", - "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", + "description": "Sample for DeleteSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_DeleteSecurityHealthAnalyticsCustomModule_sync", "segments": [ { - "end": 51, + "end": 49, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 49, "start": 27, "type": "SHORT" }, @@ -1663,17 +1828,15 @@ "type": "REQUEST_INITIALIZATION" }, { - "end": 48, "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" + "title": "securitycenter_v1_generated_security_center_delete_security_health_analytics_custom_module_sync.py" }, { "canonical": true, @@ -1683,22 +1846,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_big_query_export", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetIamPolicy" + "shortName": "GetBigQueryExport" }, "parameters": [ { "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" }, { - "name": "resource", + "name": "name", "type": "str" }, { @@ -1714,47 +1877,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_async", "segments": [ { - "end": 52, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 52, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 41, - "start": 39, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 46, - "start": 42, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 53, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" + "title": "securitycenter_v1_generated_security_center_get_big_query_export_async.py" }, { "canonical": true, @@ -1763,22 +1926,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_big_query_export", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetBigQueryExport", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetIamPolicy" + "shortName": "GetBigQueryExport" }, "parameters": [ { "name": "request", - "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" + "type": "google.cloud.securitycenter_v1.types.GetBigQueryExportRequest" }, { - "name": "resource", + "name": "name", "type": "str" }, { @@ -1794,47 +1957,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.iam.v1.policy_pb2.Policy", - "shortName": "get_iam_policy" + "resultType": "google.cloud.securitycenter_v1.types.BigQueryExport", + "shortName": "get_big_query_export" }, - "description": "Sample for GetIamPolicy", - "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", + "description": "Sample for GetBigQueryExport", + "file": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetBigQueryExport_sync", "segments": [ { - "end": 52, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 52, + "end": 51, "start": 27, "type": "SHORT" }, { - "end": 41, - "start": 39, + "end": 40, + "start": 38, "type": "CLIENT_INITIALIZATION" }, { - "end": 46, - "start": 42, + "end": 45, + "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 53, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" + "title": "securitycenter_v1_generated_security_center_get_big_query_export_sync.py" }, { "canonical": true, @@ -1844,19 +2007,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_effective_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetMuteConfig" + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1875,14 +2038,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_async", "segments": [ { "end": 51, @@ -1915,7 +2078,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_async.py" }, { "canonical": true, @@ -1924,19 +2087,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_effective_security_health_analytics_custom_module", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetEffectiveSecurityHealthAnalyticsCustomModule", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetMuteConfig" + "shortName": "GetEffectiveSecurityHealthAnalyticsCustomModule" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" + "type": "google.cloud.securitycenter_v1.types.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest" }, { "name": "name", @@ -1955,14 +2118,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", - "shortName": "get_mute_config" + "resultType": "google.cloud.securitycenter_v1.types.EffectiveSecurityHealthAnalyticsCustomModule", + "shortName": "get_effective_security_health_analytics_custom_module" }, - "description": "Sample for GetMuteConfig", - "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", + "description": "Sample for GetEffectiveSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetEffectiveSecurityHealthAnalyticsCustomModule_sync", "segments": [ { "end": 51, @@ -1995,7 +2158,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" + "title": "securitycenter_v1_generated_security_center_get_effective_security_health_analytics_custom_module_sync.py" }, { "canonical": true, @@ -2005,22 +2168,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_iam_policy", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetNotificationConfig" + "shortName": "GetIamPolicy" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" }, { - "name": "name", + "name": "resource", "type": "str" }, { @@ -2036,47 +2199,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_async", "segments": [ { - "end": 51, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 40, - "start": 38, + "end": 41, + "start": 39, "type": "CLIENT_INITIALIZATION" }, { - "end": 45, - "start": 41, + "end": 46, + "start": 42, "type": "REQUEST_INITIALIZATION" }, { - "end": 48, - "start": 46, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 53, + "start": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" + "title": "securitycenter_v1_generated_security_center_get_iam_policy_async.py" }, { "canonical": true, @@ -2085,22 +2248,22 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_iam_policy", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetIamPolicy", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetNotificationConfig" + "shortName": "GetIamPolicy" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" + "type": "google.iam.v1.iam_policy_pb2.GetIamPolicyRequest" }, { - "name": "name", + "name": "resource", "type": "str" }, { @@ -2116,47 +2279,47 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", - "shortName": "get_notification_config" + "resultType": "google.iam.v1.policy_pb2.Policy", + "shortName": "get_iam_policy" }, - "description": "Sample for GetNotificationConfig", - "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", + "description": "Sample for GetIamPolicy", + "file": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetIamPolicy_sync", "segments": [ { - "end": 51, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 51, + "end": 52, "start": 27, "type": "SHORT" }, { - "end": 40, - "start": 38, + "end": 41, + "start": 39, "type": "CLIENT_INITIALIZATION" }, { - "end": 45, - "start": 41, + "end": 46, + "start": 42, "type": "REQUEST_INITIALIZATION" }, { - "end": 48, - "start": 46, + "end": 49, + "start": 47, "type": "REQUEST_EXECUTION" }, { - "end": 52, - "start": 49, + "end": 53, + "start": 50, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" + "title": "securitycenter_v1_generated_security_center_get_iam_policy_sync.py" }, { "canonical": true, @@ -2166,19 +2329,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_mute_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetOrganizationSettings" + "shortName": "GetMuteConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" }, { "name": "name", @@ -2197,14 +2360,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_async", "segments": [ { "end": 51, @@ -2237,7 +2400,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" + "title": "securitycenter_v1_generated_security_center_get_mute_config_async.py" }, { "canonical": true, @@ -2246,19 +2409,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_mute_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetMuteConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetOrganizationSettings" + "shortName": "GetMuteConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + "type": "google.cloud.securitycenter_v1.types.GetMuteConfigRequest" }, { "name": "name", @@ -2277,14 +2440,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", - "shortName": "get_organization_settings" + "resultType": "google.cloud.securitycenter_v1.types.MuteConfig", + "shortName": "get_mute_config" }, - "description": "Sample for GetOrganizationSettings", - "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", + "description": "Sample for GetMuteConfig", + "file": "securitycenter_v1_generated_security_center_get_mute_config_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetMuteConfig_sync", "segments": [ { "end": 51, @@ -2317,7 +2480,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" + "title": "securitycenter_v1_generated_security_center_get_mute_config_sync.py" }, { "canonical": true, @@ -2327,19 +2490,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_notification_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetSource" + "shortName": "GetNotificationConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" }, { "name": "name", @@ -2358,14 +2521,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_async.py", + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_async", "segments": [ { "end": 51, @@ -2398,7 +2561,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_source_async.py" + "title": "securitycenter_v1_generated_security_center_get_notification_config_async.py" }, { "canonical": true, @@ -2407,19 +2570,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_notification_config", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetNotificationConfig", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GetSource" + "shortName": "GetNotificationConfig" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + "type": "google.cloud.securitycenter_v1.types.GetNotificationConfigRequest" }, { "name": "name", @@ -2438,14 +2601,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.types.Source", - "shortName": "get_source" + "resultType": "google.cloud.securitycenter_v1.types.NotificationConfig", + "shortName": "get_notification_config" }, - "description": "Sample for GetSource", - "file": "securitycenter_v1_generated_security_center_get_source_sync.py", + "description": "Sample for GetNotificationConfig", + "file": "securitycenter_v1_generated_security_center_get_notification_config_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetNotificationConfig_sync", "segments": [ { "end": 51, @@ -2478,7 +2641,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_get_source_sync.py" + "title": "securitycenter_v1_generated_security_center_get_notification_config_sync.py" }, { "canonical": true, @@ -2488,19 +2651,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_organization_settings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupAssets" + "shortName": "GetOrganizationSettings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" }, { "name": "retry", @@ -2515,22 +2682,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", - "shortName": "group_assets" + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_async.py", + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_async", "segments": [ { - "end": 53, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 51, "start": 27, "type": "SHORT" }, @@ -2540,22 +2707,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 52, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_assets_async.py" + "title": "securitycenter_v1_generated_security_center_get_organization_settings_async.py" }, { "canonical": true, @@ -2564,19 +2731,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_organization_settings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetOrganizationSettings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupAssets" + "shortName": "GetOrganizationSettings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.GetOrganizationSettingsRequest" + }, + { + "name": "name", + "type": "str" }, { "name": "retry", @@ -2591,22 +2762,900 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", - "shortName": "group_assets" + "resultType": "google.cloud.securitycenter_v1.types.OrganizationSettings", + "shortName": "get_organization_settings" }, - "description": "Sample for GroupAssets", - "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", + "description": "Sample for GetOrganizationSettings", + "file": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetOrganizationSettings_sync", "segments": [ { - "end": 53, + "end": 51, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_organization_settings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "get_security_health_analytics_custom_module" + }, + "description": "Sample for GetSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_security_health_analytics_custom_module_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_async", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.get_source", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GetSource", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GetSource" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GetSourceRequest" + }, + { + "name": "name", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.Source", + "shortName": "get_source" + }, + "description": "Sample for GetSource", + "file": "securitycenter_v1_generated_security_center_get_source_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GetSource_sync", + "segments": [ + { + "end": 51, + "start": 27, + "type": "FULL" + }, + { + "end": 51, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 52, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_get_source_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsAsyncPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupAssetsPager", + "shortName": "group_assets" + }, + "description": "Sample for GroupAssets", + "file": "securitycenter_v1_generated_security_center_group_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupAssets_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "GroupFindings" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "group_by", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", + "shortName": "group_findings" + }, + "description": "Sample for GroupFindings", + "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", + "segments": [ + { + "end": 53, + "start": 27, + "type": "FULL" + }, + { + "end": 53, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 46, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 49, + "start": 47, + "type": "REQUEST_EXECUTION" + }, + { + "end": 54, + "start": 50, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListAssets" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", + "shortName": "list_assets" + }, + "description": "Sample for ListAssets", + "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListBigQueryExports" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" + }, + { + "name": "parent", + "type": "str" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, "start": 27, "type": "SHORT" }, @@ -2616,51 +3665,127 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_assets_sync.py" + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" }, { "canonical": true, "clientMethod": { - "async": true, "client": { - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", - "shortName": "SecurityCenterAsyncClient" + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.group_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupFindings" + "shortName": "ListBigQueryExports" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" }, { "name": "parent", "type": "str" }, { - "name": "group_by", + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", + "shortName": "list_big_query_exports" + }, + "description": "Sample for ListBigQueryExports", + "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", + "segments": [ + { + "end": 52, + "start": 27, + "type": "FULL" + }, + { + "end": 52, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 45, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 48, + "start": 46, + "type": "REQUEST_EXECUTION" + }, + { + "end": 53, + "start": 49, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" + }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_descendant_security_health_analytics_custom_modules", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", "type": "str" }, { @@ -2676,22 +3801,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsAsyncPager", - "shortName": "group_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_async.py", + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_async", "segments": [ { - "end": 53, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 52, "start": 27, "type": "SHORT" }, @@ -2701,22 +3826,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_findings_async.py" + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -2725,28 +3850,24 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.group_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_descendant_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.GroupFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListDescendantSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "GroupFindings" + "shortName": "ListDescendantSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.GroupFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListDescendantSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", "type": "str" }, - { - "name": "group_by", - "type": "str" - }, { "name": "retry", "type": "google.api_core.retry.Retry" @@ -2760,22 +3881,22 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.GroupFindingsPager", - "shortName": "group_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_descendant_security_health_analytics_custom_modules" }, - "description": "Sample for GroupFindings", - "file": "securitycenter_v1_generated_security_center_group_findings_sync.py", + "description": "Sample for ListDescendantSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_GroupFindings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListDescendantSecurityHealthAnalyticsCustomModules_sync", "segments": [ { - "end": 53, + "end": 52, "start": 27, "type": "FULL" }, { - "end": 53, + "end": 52, "start": 27, "type": "SHORT" }, @@ -2785,22 +3906,22 @@ "type": "CLIENT_INITIALIZATION" }, { - "end": 46, + "end": 45, "start": 41, "type": "REQUEST_INITIALIZATION" }, { - "end": 49, - "start": 47, + "end": 48, + "start": 46, "type": "REQUEST_EXECUTION" }, { - "end": 54, - "start": 50, + "end": 53, + "start": 49, "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_group_findings_sync.py" + "title": "securitycenter_v1_generated_security_center_list_descendant_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -2810,19 +3931,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_effective_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListAssets" + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -2837,14 +3962,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsAsyncPager", - "shortName": "list_assets" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_effective_security_health_analytics_custom_modules" }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_async.py", + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_async", "segments": [ { "end": 52, @@ -2877,7 +4002,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_assets_async.py" + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -2886,19 +4011,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_assets", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_effective_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListAssets", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListEffectiveSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListAssets" + "shortName": "ListEffectiveSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListAssetsRequest" + "type": "google.cloud.securitycenter_v1.types.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -2913,14 +4042,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListAssetsPager", - "shortName": "list_assets" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_effective_security_health_analytics_custom_modules" }, - "description": "Sample for ListAssets", - "file": "securitycenter_v1_generated_security_center_list_assets_sync.py", + "description": "Sample for ListEffectiveSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListAssets_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListEffectiveSecurityHealthAnalyticsCustomModules_sync", "segments": [ { "end": 52, @@ -2953,7 +4082,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_assets_sync.py" + "title": "securitycenter_v1_generated_security_center_list_effective_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -2963,23 +4092,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_big_query_exports", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListBigQueryExports" + "shortName": "ListFindings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" }, { "name": "retry", @@ -2994,14 +4119,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsAsyncPager", - "shortName": "list_big_query_exports" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", + "shortName": "list_findings" }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py", + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", "segments": [ { "end": 52, @@ -3034,7 +4159,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_async.py" + "title": "securitycenter_v1_generated_security_center_list_findings_async.py" }, { "canonical": true, @@ -3043,23 +4168,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_big_query_exports", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListBigQueryExports", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListBigQueryExports" + "shortName": "ListFindings" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListBigQueryExportsRequest" - }, - { - "name": "parent", - "type": "str" + "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" }, { "name": "retry", @@ -3074,14 +4195,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListBigQueryExportsPager", - "shortName": "list_big_query_exports" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", + "shortName": "list_findings" }, - "description": "Sample for ListBigQueryExports", - "file": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py", + "description": "Sample for ListFindings", + "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListBigQueryExports_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", "segments": [ { "end": 52, @@ -3114,7 +4235,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_big_query_exports_sync.py" + "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" }, { "canonical": true, @@ -3124,19 +4245,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListFindings" + "shortName": "ListMuteConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -3151,14 +4276,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsAsyncPager", - "shortName": "list_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", + "shortName": "list_mute_configs" }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_async.py", + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", "segments": [ { "end": 52, @@ -3191,7 +4316,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_findings_async.py" + "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" }, { "canonical": true, @@ -3200,19 +4325,23 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_findings", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListFindings", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListFindings" + "shortName": "ListMuteConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListFindingsRequest" + "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + }, + { + "name": "parent", + "type": "str" }, { "name": "retry", @@ -3227,14 +4356,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListFindingsPager", - "shortName": "list_findings" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", + "shortName": "list_mute_configs" }, - "description": "Sample for ListFindings", - "file": "securitycenter_v1_generated_security_center_list_findings_sync.py", + "description": "Sample for ListMuteConfigs", + "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListFindings_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", "segments": [ { "end": 52, @@ -3267,7 +4396,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_findings_sync.py" + "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" }, { "canonical": true, @@ -3277,19 +4406,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_mute_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListMuteConfigs" + "shortName": "ListNotificationConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" }, { "name": "parent", @@ -3308,14 +4437,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsAsyncPager", - "shortName": "list_mute_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", + "shortName": "list_notification_configs" }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_async.py", + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", "segments": [ { "end": 52, @@ -3348,7 +4477,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_async.py" + "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" }, { "canonical": true, @@ -3357,19 +4486,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_mute_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListMuteConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListMuteConfigs" + "shortName": "ListNotificationConfigs" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListMuteConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" }, { "name": "parent", @@ -3388,14 +4517,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListMuteConfigsPager", - "shortName": "list_mute_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", + "shortName": "list_notification_configs" }, - "description": "Sample for ListMuteConfigs", - "file": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py", + "description": "Sample for ListNotificationConfigs", + "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListMuteConfigs_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", "segments": [ { "end": 52, @@ -3428,7 +4557,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_mute_configs_sync.py" + "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" }, { "canonical": true, @@ -3438,19 +4567,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", "shortName": "SecurityCenterAsyncClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_notification_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.list_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListNotificationConfigs" + "shortName": "ListSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", @@ -3469,14 +4598,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsAsyncPager", - "shortName": "list_notification_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager", + "shortName": "list_security_health_analytics_custom_modules" }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_async.py", + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_async", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_async", "segments": [ { "end": 52, @@ -3509,7 +4638,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_async.py" + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_async.py" }, { "canonical": true, @@ -3518,19 +4647,19 @@ "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", "shortName": "SecurityCenterClient" }, - "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_notification_configs", + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.list_security_health_analytics_custom_modules", "method": { - "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListNotificationConfigs", + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.ListSecurityHealthAnalyticsCustomModules", "service": { "fullName": "google.cloud.securitycenter.v1.SecurityCenter", "shortName": "SecurityCenter" }, - "shortName": "ListNotificationConfigs" + "shortName": "ListSecurityHealthAnalyticsCustomModules" }, "parameters": [ { "name": "request", - "type": "google.cloud.securitycenter_v1.types.ListNotificationConfigsRequest" + "type": "google.cloud.securitycenter_v1.types.ListSecurityHealthAnalyticsCustomModulesRequest" }, { "name": "parent", @@ -3549,14 +4678,14 @@ "type": "Sequence[Tuple[str, str]" } ], - "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListNotificationConfigsPager", - "shortName": "list_notification_configs" + "resultType": "google.cloud.securitycenter_v1.services.security_center.pagers.ListSecurityHealthAnalyticsCustomModulesPager", + "shortName": "list_security_health_analytics_custom_modules" }, - "description": "Sample for ListNotificationConfigs", - "file": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py", + "description": "Sample for ListSecurityHealthAnalyticsCustomModules", + "file": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py", "language": "PYTHON", "origin": "API_DEFINITION", - "regionTag": "securitycenter_v1_generated_SecurityCenter_ListNotificationConfigs_sync", + "regionTag": "securitycenter_v1_generated_SecurityCenter_ListSecurityHealthAnalyticsCustomModules_sync", "segments": [ { "end": 52, @@ -3589,7 +4718,7 @@ "type": "RESPONSE_HANDLING" } ], - "title": "securitycenter_v1_generated_security_center_list_notification_configs_sync.py" + "title": "securitycenter_v1_generated_security_center_list_security_health_analytics_custom_modules_sync.py" }, { "canonical": true, @@ -5587,6 +6716,175 @@ ], "title": "securitycenter_v1_generated_security_center_update_organization_settings_sync.py" }, + { + "canonical": true, + "clientMethod": { + "async": true, + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient", + "shortName": "SecurityCenterAsyncClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterAsyncClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_async", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_async.py" + }, + { + "canonical": true, + "clientMethod": { + "client": { + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient", + "shortName": "SecurityCenterClient" + }, + "fullName": "google.cloud.securitycenter_v1.SecurityCenterClient.update_security_health_analytics_custom_module", + "method": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter.UpdateSecurityHealthAnalyticsCustomModule", + "service": { + "fullName": "google.cloud.securitycenter.v1.SecurityCenter", + "shortName": "SecurityCenter" + }, + "shortName": "UpdateSecurityHealthAnalyticsCustomModule" + }, + "parameters": [ + { + "name": "request", + "type": "google.cloud.securitycenter_v1.types.UpdateSecurityHealthAnalyticsCustomModuleRequest" + }, + { + "name": "security_health_analytics_custom_module", + "type": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule" + }, + { + "name": "update_mask", + "type": "google.protobuf.field_mask_pb2.FieldMask" + }, + { + "name": "retry", + "type": "google.api_core.retry.Retry" + }, + { + "name": "timeout", + "type": "float" + }, + { + "name": "metadata", + "type": "Sequence[Tuple[str, str]" + } + ], + "resultType": "google.cloud.securitycenter_v1.types.SecurityHealthAnalyticsCustomModule", + "shortName": "update_security_health_analytics_custom_module" + }, + "description": "Sample for UpdateSecurityHealthAnalyticsCustomModule", + "file": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py", + "language": "PYTHON", + "origin": "API_DEFINITION", + "regionTag": "securitycenter_v1_generated_SecurityCenter_UpdateSecurityHealthAnalyticsCustomModule_sync", + "segments": [ + { + "end": 50, + "start": 27, + "type": "FULL" + }, + { + "end": 50, + "start": 27, + "type": "SHORT" + }, + { + "end": 40, + "start": 38, + "type": "CLIENT_INITIALIZATION" + }, + { + "end": 44, + "start": 41, + "type": "REQUEST_INITIALIZATION" + }, + { + "end": 47, + "start": 45, + "type": "REQUEST_EXECUTION" + }, + { + "end": 51, + "start": 48, + "type": "RESPONSE_HANDLING" + } + ], + "title": "securitycenter_v1_generated_security_center_update_security_health_analytics_custom_module_sync.py" + }, { "canonical": true, "clientMethod": { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json index 40bca2cb..a4c1295e 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json index 6114500d..774592ce 100644 --- a/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json +++ b/samples/generated_samples/snippet_metadata_google.cloud.securitycenter.v1p1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-securitycenter", - "version": "1.19.1" + "version": "0.1.0" }, "snippets": [ { diff --git a/scripts/fixup_securitycenter_v1_keywords.py b/scripts/fixup_securitycenter_v1_keywords.py index 3181353e..af2d084d 100644 --- a/scripts/fixup_securitycenter_v1_keywords.py +++ b/scripts/fixup_securitycenter_v1_keywords.py @@ -44,23 +44,30 @@ class securitycenterCallTransformer(cst.CSTTransformer): 'create_finding': ('parent', 'finding_id', 'finding', ), 'create_mute_config': ('parent', 'mute_config', 'mute_config_id', ), 'create_notification_config': ('parent', 'config_id', 'notification_config', ), + 'create_security_health_analytics_custom_module': ('parent', 'security_health_analytics_custom_module', ), 'create_source': ('parent', 'source', ), 'delete_big_query_export': ('name', ), 'delete_mute_config': ('name', ), 'delete_notification_config': ('name', ), + 'delete_security_health_analytics_custom_module': ('name', ), 'get_big_query_export': ('name', ), + 'get_effective_security_health_analytics_custom_module': ('name', ), 'get_iam_policy': ('resource', 'options', ), 'get_mute_config': ('name', ), 'get_notification_config': ('name', ), 'get_organization_settings': ('name', ), + 'get_security_health_analytics_custom_module': ('name', ), 'get_source': ('name', ), 'group_assets': ('parent', 'group_by', 'filter', 'compare_duration', 'read_time', 'page_token', 'page_size', ), 'group_findings': ('parent', 'group_by', 'filter', 'read_time', 'compare_duration', 'page_token', 'page_size', ), 'list_assets': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), 'list_big_query_exports': ('parent', 'page_size', 'page_token', ), + 'list_descendant_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), + 'list_effective_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), 'list_findings': ('parent', 'filter', 'order_by', 'read_time', 'compare_duration', 'field_mask', 'page_token', 'page_size', ), 'list_mute_configs': ('parent', 'page_size', 'page_token', ), 'list_notification_configs': ('parent', 'page_token', 'page_size', ), + 'list_security_health_analytics_custom_modules': ('parent', 'page_size', 'page_token', ), 'list_sources': ('parent', 'page_token', 'page_size', ), 'run_asset_discovery': ('parent', ), 'set_finding_state': ('name', 'state', 'start_time', ), @@ -73,6 +80,7 @@ class securitycenterCallTransformer(cst.CSTTransformer): 'update_mute_config': ('mute_config', 'update_mask', ), 'update_notification_config': ('notification_config', 'update_mask', ), 'update_organization_settings': ('organization_settings', 'update_mask', ), + 'update_security_health_analytics_custom_module': ('security_health_analytics_custom_module', 'update_mask', ), 'update_security_marks': ('security_marks', 'update_mask', 'start_time', ), 'update_source': ('source', 'update_mask', ), } diff --git a/tests/unit/gapic/securitycenter_v1/test_security_center.py b/tests/unit/gapic/securitycenter_v1/test_security_center.py index 0e9185a4..3e941302 100644 --- a/tests/unit/gapic/securitycenter_v1/test_security_center.py +++ b/tests/unit/gapic/securitycenter_v1/test_security_center.py @@ -75,8 +75,14 @@ contact_details, container, database, + effective_security_health_analytics_custom_module, exfiltration, ) +from google.cloud.securitycenter_v1.types import ( + process, + run_asset_discovery_response, + security_health_analytics_custom_config, +) from google.cloud.securitycenter_v1.types import ( iam_binding, indicator, @@ -85,7 +91,6 @@ label, mitre_attack, ) -from google.cloud.securitycenter_v1.types import process, run_asset_discovery_response from google.cloud.securitycenter_v1.types import external_system as gcs_external_system from google.cloud.securitycenter_v1.types import ( notification_config as gcs_notification_config, @@ -93,6 +98,10 @@ from google.cloud.securitycenter_v1.types import ( organization_settings as gcs_organization_settings, ) +from google.cloud.securitycenter_v1.types import security_health_analytics_custom_module +from google.cloud.securitycenter_v1.types import ( + security_health_analytics_custom_module as gcs_security_health_analytics_custom_module, +) from google.cloud.securitycenter_v1.types import security_marks as gcs_security_marks from google.cloud.securitycenter_v1.types import external_system from google.cloud.securitycenter_v1.types import file @@ -1001,6 +1010,327 @@ async def test_bulk_mute_findings_flattened_error_async(): ) +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_create_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +def test_create_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + client.create_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + ) + response = await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_async_from_dict(): + await test_create_security_health_analytics_custom_module_async(request_type=dict) + + +def test_create_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + await client.create_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_security_health_analytics_custom_module( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) + assert arg == mock_val + + +def test_create_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_security_health_analytics_custom_module( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_create_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + @pytest.mark.parametrize( "request_type", [ @@ -1287,6 +1617,7 @@ def test_create_finding(request_type, transport: str = "grpc"): parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) response = client.create_finding(request) @@ -1311,6 +1642,7 @@ def test_create_finding(request_type, transport: str = "grpc"): assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" def test_create_finding_empty_call(): @@ -1362,6 +1694,7 @@ async def test_create_finding_async( parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) ) response = await client.create_finding(request) @@ -1387,6 +1720,7 @@ async def test_create_finding_async( assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio @@ -2599,11 +2933,13 @@ async def test_delete_notification_config_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetBigQueryExportRequest, + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_big_query_export(request_type, transport: str = "grpc"): +def test_delete_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -2615,16 +2951,267 @@ def test_get_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.get_big_query_export), "__call__" + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( - name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + call.return_value = None + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + client.delete_security_health_analytics_custom_module() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + + # Establish that the response is the type that we expect. + assert response is None + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_async_from_dict(): + await test_delete_security_health_analytics_custom_module_async(request_type=dict) + + +def test_delete_security_health_analytics_custom_module_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = None + client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + + request.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_security_health_analytics_custom_module(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_security_health_analytics_custom_module_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_security_health_analytics_custom_module( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_security_health_analytics_custom_module_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_security_health_analytics_custom_module), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_security_health_analytics_custom_module( + name="name_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_delete_security_health_analytics_custom_module_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GetBigQueryExportRequest, + dict, + ], +) +def test_get_big_query_export(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.get_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", ) response = client.get_big_query_export(request) @@ -3877,11 +4464,13 @@ async def test_get_organization_settings_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetSourceRequest, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_source(request_type, transport: str = "grpc"): +def test_get_effective_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -3892,30 +4481,40 @@ def test_get_source(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source( + call.return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", ) - response = client.get_source(request) + response = client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" -def test_get_source_empty_call(): +def test_get_effective_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -3924,17 +4523,23 @@ def test_get_source_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - client.get_source() + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + client.get_effective_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_get_source_async( +async def test_get_effective_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GetSourceRequest, + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -3946,51 +4551,72 @@ async def test_get_source_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - source.Source( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", ) ) - response = await client.get_source(request) + response = await client.get_effective_security_health_analytics_custom_module( + request + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GetSourceRequest() + assert ( + args[0] + == securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_get_source_async_from_dict(): - await test_get_source_async(request_type=dict) +async def test_get_effective_security_health_analytics_custom_module_async_from_dict(): + await test_get_effective_security_health_analytics_custom_module_async( + request_type=dict + ) -def test_get_source_field_headers(): +def test_get_effective_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - call.return_value = source.Source() - client.get_source(request) + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4006,21 +4632,28 @@ def test_get_source_field_headers(): @pytest.mark.asyncio -async def test_get_source_field_headers_async(): +async def test_get_effective_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) - await client.get_source(request) + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) + await client.get_effective_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4035,18 +4668,23 @@ async def test_get_source_field_headers_async(): ) in kw["metadata"] -def test_get_source_flattened(): +def test_get_effective_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source() + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.get_source( + client.get_effective_security_health_analytics_custom_module( name="name_value", ) @@ -4059,7 +4697,7 @@ def test_get_source_flattened(): assert arg == mock_val -def test_get_source_flattened_error(): +def test_get_effective_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4067,27 +4705,34 @@ def test_get_source_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) @pytest.mark.asyncio -async def test_get_source_flattened_async(): +async def test_get_effective_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.get_source), "__call__") as call: + with mock.patch.object( + type(client.transport.get_effective_security_health_analytics_custom_module), + "__call__", + ) as call: # Designate an appropriate return value for the call. - call.return_value = source.Source() + call.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.get_source( + response = await client.get_effective_security_health_analytics_custom_module( name="name_value", ) @@ -4101,7 +4746,7 @@ async def test_get_source_flattened_async(): @pytest.mark.asyncio -async def test_get_source_flattened_error_async(): +async def test_get_effective_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4109,8 +4754,8 @@ async def test_get_source_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.get_source( - securitycenter_service.GetSourceRequest(), + await client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) @@ -4118,11 +4763,13 @@ async def test_get_source_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupAssetsRequest, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_group_assets(request_type, transport: str = "grpc"): +def test_get_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4133,26 +4780,43 @@ def test_group_assets(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupAssetsResponse( - next_page_token="next_page_token_value", - total_size=1086, + call.return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) - response = client.group_assets(request) + response = client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_group_assets_empty_call(): +def test_get_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4161,17 +4825,22 @@ def test_group_assets_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - client.group_assets() + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + client.get_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_group_assets_async( +async def test_get_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GroupAssetsRequest, + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4183,47 +4852,68 @@ async def test_group_assets_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupAssetsResponse( - next_page_token="next_page_token_value", - total_size=1086, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) ) - response = await client.group_assets(request) + response = await client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupAssetsRequest() + assert ( + args[0] + == securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsAsyncPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" @pytest.mark.asyncio -async def test_group_assets_async_from_dict(): - await test_group_assets_async(request_type=dict) +async def test_get_security_health_analytics_custom_module_async_from_dict(): + await test_get_security_health_analytics_custom_module_async(request_type=dict) -def test_group_assets_field_headers(): +def test_get_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - call.return_value = securitycenter_service.GroupAssetsResponse() - client.group_assets(request) + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4234,28 +4924,30 @@ def test_group_assets_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_group_assets_field_headers_async(): +async def test_get_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupAssetsResponse() + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - await client.group_assets(request) + await client.get_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4266,206 +4958,108 @@ async def test_group_assets_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] -def test_group_assets_pager(transport_name: str = "grpc"): +def test_get_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + with mock.patch.object( + type(client.transport.get_security_health_analytics_custom_module), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.get_security_health_analytics_custom_module( + name="name_value", ) - pager = client.group_assets(request={}) - - assert pager._metadata == metadata - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val -def test_group_assets_pages(transport_name: str = "grpc"): +def test_get_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_assets), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", ) - pages = list(client.group_assets(request={}).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_group_assets_async_pager(): +async def test_get_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.get_security_health_analytics_custom_module), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Designate an appropriate return value for the call. + call.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - async_pager = await client.group_assets( - request={}, + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.get_security_health_analytics_custom_module( + name="name_value", ) - assert async_pager.next_page_token == "abc" - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) - assert len(responses) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in responses) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val @pytest.mark.asyncio -async def test_group_assets_async_pages(): +async def test_get_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], - next_page_token="def", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - ], - next_page_token="ghi", - ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - ), - RuntimeError, + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", ) - pages = [] - async for page_ in ( - await client.group_assets(request={}) - ).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupFindingsRequest, + securitycenter_service.GetSourceRequest, dict, ], ) -def test_group_findings(request_type, transport: str = "grpc"): +def test_get_source(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4476,26 +5070,30 @@ def test_group_findings(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse( - next_page_token="next_page_token_value", - total_size=1086, + call.return_value = source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) - response = client.group_findings(request) + response = client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_group_findings_empty_call(): +def test_get_source_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4504,17 +5102,17 @@ def test_group_findings_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - client.group_findings() + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + client.get_source() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() @pytest.mark.asyncio -async def test_group_findings_async( +async def test_get_source_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.GroupFindingsRequest, + request_type=securitycenter_service.GetSourceRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4526,47 +5124,51 @@ async def test_group_findings_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse( - next_page_token="next_page_token_value", - total_size=1086, + source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) ) - response = await client.group_findings(request) + response = await client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.GroupFindingsRequest() + assert args[0] == securitycenter_service.GetSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsAsyncPager) - assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_group_findings_async_from_dict(): - await test_group_findings_async(request_type=dict) +async def test_get_source_async_from_dict(): + await test_get_source_async(request_type=dict) -def test_group_findings_field_headers(): +def test_get_source_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.GetSourceRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - call.return_value = securitycenter_service.GroupFindingsResponse() - client.group_findings(request) + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + call.return_value = source.Source() + client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -4577,28 +5179,26 @@ def test_group_findings_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_group_findings_field_headers_async(): +async def test_get_source_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.GetSourceRequest() - request.parent = "parent_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse() - ) - await client.group_findings(request) + with mock.patch.object(type(client.transport.get_source), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) + await client.get_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -4609,39 +5209,35 @@ async def test_group_findings_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "name=name_value", ) in kw["metadata"] -def test_group_findings_flattened(): +def test_get_source_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() + call.return_value = source.Source() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.group_findings( - parent="parent_value", - group_by="group_by_value", + client.get_source( + name="name_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].group_by - mock_val = "group_by_value" + arg = args[0].name + mock_val = "name_value" assert arg == mock_val -def test_group_findings_flattened_error(): +def test_get_source_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4649,48 +5245,41 @@ def test_group_findings_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent="parent_value", - group_by="group_by_value", + client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) @pytest.mark.asyncio -async def test_group_findings_flattened_async(): +async def test_get_source_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.get_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.GroupFindingsResponse() + call.return_value = source.Source() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.GroupFindingsResponse() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(source.Source()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.group_findings( - parent="parent_value", - group_by="group_by_value", + response = await client.get_source( + name="name_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].group_by - mock_val = "group_by_value" + arg = args[0].name + mock_val = "name_value" assert arg == mock_val @pytest.mark.asyncio -async def test_group_findings_flattened_error_async(): +async def test_get_source_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -4698,42 +5287,196 @@ async def test_group_findings_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.group_findings( - securitycenter_service.GroupFindingsRequest(), - parent="parent_value", - group_by="group_by_value", + await client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) -def test_group_findings_pager(transport_name: str = "grpc"): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GroupAssetsRequest, + dict, + ], +) +def test_group_assets(request_type, transport: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - ], - next_page_token="abc", - ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], - next_page_token="def", + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, + ) + response = client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 + + +def test_group_assets_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + client.group_assets() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + +@pytest.mark.asyncio +async def test_group_assets_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.GroupAssetsRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, + ) + ) + response = await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.GroupAssetsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.GroupAssetsAsyncPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 + + +@pytest.mark.asyncio +async def test_group_assets_async_from_dict(): + await test_group_assets_async(request_type=dict) + + +def test_group_assets_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + call.return_value = securitycenter_service.GroupAssetsResponse() + client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_group_assets_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.GroupAssetsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupAssetsResponse() + ) + await client.group_assets(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_group_assets_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4746,7 +5489,7 @@ def test_group_findings_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.group_findings(request={}) + pager = client.group_assets(request={}) assert pager._metadata == metadata @@ -4755,17 +5498,17 @@ def test_group_findings_pager(transport_name: str = "grpc"): assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_group_findings_pages(transport_name: str = "grpc"): +def test_group_assets_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + with mock.patch.object(type(client.transport.group_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4773,17 +5516,17 @@ def test_group_findings_pages(transport_name: str = "grpc"): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4791,24 +5534,24 @@ def test_group_findings_pages(transport_name: str = "grpc"): ), RuntimeError, ) - pages = list(client.group_findings(request={}).pages) + pages = list(client.group_assets(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_group_findings_async_pager(): +async def test_group_assets_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4816,17 +5559,17 @@ async def test_group_findings_async_pager(): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4834,7 +5577,7 @@ async def test_group_findings_async_pager(): ), RuntimeError, ) - async_pager = await client.group_findings( + async_pager = await client.group_assets( request={}, ) assert async_pager.next_page_token == "abc" @@ -4847,18 +5590,18 @@ async def test_group_findings_async_pager(): @pytest.mark.asyncio -async def test_group_findings_async_pages(): +async def test_group_assets_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4866,17 +5609,17 @@ async def test_group_findings_async_pages(): ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( + securitycenter_service.GroupAssetsResponse( group_by_results=[ securitycenter_service.GroupResult(), securitycenter_service.GroupResult(), @@ -4886,7 +5629,7 @@ async def test_group_findings_async_pages(): ) pages = [] async for page_ in ( - await client.group_findings(request={}) + await client.group_assets(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -4896,11 +5639,11 @@ async def test_group_findings_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListAssetsRequest, + securitycenter_service.GroupFindingsRequest, dict, ], ) -def test_list_assets(request_type, transport: str = "grpc"): +def test_group_findings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -4911,26 +5654,26 @@ def test_list_assets(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListAssetsResponse( + call.return_value = securitycenter_service.GroupFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) - response = client.list_assets(request) + response = client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) + assert isinstance(response, pagers.GroupFindingsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_list_assets_empty_call(): +def test_group_findings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -4939,17 +5682,17 @@ def test_list_assets_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: - client.list_assets() + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + client.group_findings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() @pytest.mark.asyncio -async def test_list_assets_async( +async def test_group_findings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListAssetsRequest, + request_type=securitycenter_service.GroupFindingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -4961,47 +5704,47 @@ async def test_list_assets_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListAssetsResponse( + securitycenter_service.GroupFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) ) - response = await client.list_assets(request) + response = await client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListAssetsRequest() + assert args[0] == securitycenter_service.GroupFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsAsyncPager) + assert isinstance(response, pagers.GroupFindingsAsyncPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_assets_async_from_dict(): - await test_list_assets_async(request_type=dict) +async def test_group_findings_async_from_dict(): + await test_group_findings_async(request_type=dict) -def test_list_assets_field_headers(): +def test_group_findings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.GroupFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: - call.return_value = securitycenter_service.ListAssetsResponse() - client.list_assets(request) + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + call.return_value = securitycenter_service.GroupFindingsResponse() + client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5017,23 +5760,23 @@ def test_list_assets_field_headers(): @pytest.mark.asyncio -async def test_list_assets_field_headers_async(): +async def test_group_findings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.GroupFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListAssetsResponse() + securitycenter_service.GroupFindingsResponse() ) - await client.list_assets(request) + await client.group_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5048,38 +5791,130 @@ async def test_list_assets_field_headers_async(): ) in kw["metadata"] -def test_list_assets_pager(transport_name: str = "grpc"): +def test_group_findings_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.group_findings( + parent="parent_value", + group_by="group_by_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].group_by + mock_val = "group_by_value" + assert arg == mock_val + + +def test_group_findings_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", + ) + + +@pytest.mark.asyncio +async def test_group_findings_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.GroupFindingsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.GroupFindingsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.group_findings( + parent="parent_value", + group_by="group_by_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].group_by + mock_val = "group_by_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_group_findings_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", + ) + + +def test_group_findings_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, @@ -5089,98 +5924,95 @@ def test_list_assets_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_assets(request={}) + pager = client.group_findings(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results - ) + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_list_assets_pages(transport_name: str = "grpc"): +def test_group_findings_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + with mock.patch.object(type(client.transport.group_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) - pages = list(client.list_assets(request={}).pages) + pages = list(client.group_findings(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_assets_async_pager(): +async def test_group_findings_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) - async_pager = await client.list_assets( + async_pager = await client.group_findings( request={}, ) assert async_pager.next_page_token == "abc" @@ -5189,53 +6021,50 @@ async def test_list_assets_async_pager(): responses.append(response) assert len(responses) == 6 - assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in responses - ) + assert all(isinstance(i, securitycenter_service.GroupResult) for i in responses) @pytest.mark.asyncio -async def test_list_assets_async_pages(): +async def test_group_findings_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock + type(client.transport.group_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.GroupFindingsResponse( + group_by_results=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_assets(request={}) + await client.group_findings(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -5245,11 +6074,11 @@ async def test_list_assets_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListFindingsRequest, + securitycenter_service.ListAssetsRequest, dict, ], ) -def test_list_findings(request_type, transport: str = "grpc"): +def test_list_assets(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5260,26 +6089,26 @@ def test_list_findings(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListFindingsResponse( + call.return_value = securitycenter_service.ListAssetsResponse( next_page_token="next_page_token_value", total_size=1086, ) - response = client.list_findings(request) + response = client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) + assert isinstance(response, pagers.ListAssetsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_list_findings_empty_call(): +def test_list_assets_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -5288,17 +6117,17 @@ def test_list_findings_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: - client.list_findings() + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + client.list_assets() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() @pytest.mark.asyncio -async def test_list_findings_async( +async def test_list_assets_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListFindingsRequest, + request_type=securitycenter_service.ListAssetsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5310,47 +6139,47 @@ async def test_list_findings_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListFindingsResponse( + securitycenter_service.ListAssetsResponse( next_page_token="next_page_token_value", total_size=1086, ) ) - response = await client.list_findings(request) + response = await client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListFindingsRequest() + assert args[0] == securitycenter_service.ListAssetsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsAsyncPager) + assert isinstance(response, pagers.ListAssetsAsyncPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_findings_async_from_dict(): - await test_list_findings_async(request_type=dict) +async def test_list_assets_async_from_dict(): + await test_list_assets_async(request_type=dict) -def test_list_findings_field_headers(): +def test_list_assets_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() + request = securitycenter_service.ListAssetsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: - call.return_value = securitycenter_service.ListFindingsResponse() - client.list_findings(request) + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: + call.return_value = securitycenter_service.ListAssetsResponse() + client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5366,23 +6195,23 @@ def test_list_findings_field_headers(): @pytest.mark.asyncio -async def test_list_findings_field_headers_async(): +async def test_list_assets_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListFindingsRequest() + request = securitycenter_service.ListAssetsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListFindingsResponse() + securitycenter_service.ListAssetsResponse() ) - await client.list_findings(request) + await client.list_assets(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5397,38 +6226,38 @@ async def test_list_findings_field_headers_async(): ) in kw["metadata"] -def test_list_findings_pager(transport_name: str = "grpc"): +def test_list_assets_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, @@ -5438,100 +6267,98 @@ def test_list_findings_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_findings(request={}) + pager = client.list_assets(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 assert all( - isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult - ) + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) for i in results ) -def test_list_findings_pages(transport_name: str = "grpc"): +def test_list_assets_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + with mock.patch.object(type(client.transport.list_assets), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) - pages = list(client.list_findings(request={}).pages) + pages = list(client.list_assets(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_findings_async_pager(): +async def test_list_assets_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) - async_pager = await client.list_findings( + async_pager = await client.list_assets( request={}, ) assert async_pager.next_page_token == "abc" @@ -5541,54 +6368,52 @@ async def test_list_findings_async_pager(): assert len(responses) == 6 assert all( - isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult - ) + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) for i in responses ) @pytest.mark.asyncio -async def test_list_findings_async_pages(): +async def test_list_assets_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_assets), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListAssetsResponse( + list_assets_results=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_findings(request={}) + await client.list_assets(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -5598,11 +6423,13 @@ async def test_list_findings_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListMuteConfigsRequest, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_mute_configs(request_type, transport: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -5614,25 +6441,33 @@ def test_list_mute_configs(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse( + call.return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", ) - response = client.list_mute_configs(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager + ) assert response.next_page_token == "next_page_token_value" -def test_list_mute_configs_empty_call(): +def test_list_descendant_security_health_analytics_custom_modules_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -5642,18 +6477,22 @@ def test_list_mute_configs_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: - client.list_mute_configs() + client.list_descendant_security_health_analytics_custom_modules() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_list_mute_configs_async( +async def test_list_descendant_security_health_analytics_custom_modules_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListMuteConfigsRequest, + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -5666,48 +6505,65 @@ async def test_list_mute_configs_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", ) ) - response = await client.list_mute_configs(request) + response = ( + await client.list_descendant_security_health_analytics_custom_modules( + request + ) + ) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListMuteConfigsRequest() + assert ( + args[0] + == securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsAsyncPager) + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesAsyncPager + ) assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_list_mute_configs_async_from_dict(): - await test_list_mute_configs_async(request_type=dict) +async def test_list_descendant_security_health_analytics_custom_modules_async_from_dict(): + await test_list_descendant_security_health_analytics_custom_modules_async( + request_type=dict + ) -def test_list_mute_configs_field_headers(): +def test_list_descendant_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = securitycenter_service.ListMuteConfigsResponse() - client.list_mute_configs(request) + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_descendant_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -5723,25 +6579,28 @@ def test_list_mute_configs_field_headers(): @pytest.mark.asyncio -async def test_list_mute_configs_field_headers_async(): +async def test_list_descendant_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse() + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() ) - await client.list_mute_configs(request) + await client.list_descendant_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -5756,20 +6615,23 @@ async def test_list_mute_configs_field_headers_async(): ) in kw["metadata"] -def test_list_mute_configs_flattened(): +def test_list_descendant_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_mute_configs( + client.list_descendant_security_health_analytics_custom_modules( parent="parent_value", ) @@ -5782,7 +6644,7 @@ def test_list_mute_configs_flattened(): assert arg == mock_val -def test_list_mute_configs_flattened_error(): +def test_list_descendant_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -5790,32 +6652,37 @@ def test_list_mute_configs_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_list_mute_configs_flattened_async(): +async def test_list_descendant_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListMuteConfigsResponse() + call.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListMuteConfigsResponse() + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_mute_configs( - parent="parent_value", + response = ( + await client.list_descendant_security_health_analytics_custom_modules( + parent="parent_value", + ) ) # Establish that the underlying call was made with the expected @@ -5828,7 +6695,7 @@ async def test_list_mute_configs_flattened_async(): @pytest.mark.asyncio -async def test_list_mute_configs_flattened_error_async(): +async def test_list_descendant_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -5836,13 +6703,15 @@ async def test_list_mute_configs_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + await client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) -def test_list_mute_configs_pager(transport_name: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, @@ -5850,32 +6719,33 @@ def test_list_mute_configs_pager(transport_name: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, @@ -5885,16 +6755,26 @@ def test_list_mute_configs_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_mute_configs(request={}) + pager = client.list_descendant_security_health_analytics_custom_modules( + request={} + ) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in results) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) -def test_list_mute_configs_pages(transport_name: str = "grpc"): +def test_list_descendant_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, @@ -5902,83 +6782,90 @@ def test_list_mute_configs_pages(transport_name: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), "__call__" + type(client.transport.list_descendant_security_health_analytics_custom_modules), + "__call__", ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) - pages = list(client.list_mute_configs(request={}).pages) + pages = list( + client.list_descendant_security_health_analytics_custom_modules( + request={} + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_mute_configs_async_pager(): +async def test_list_descendant_security_health_analytics_custom_modules_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), + type(client.transport.list_descendant_security_health_analytics_custom_modules), "__call__", new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) - async_pager = await client.list_mute_configs( - request={}, + async_pager = ( + await client.list_descendant_security_health_analytics_custom_modules( + request={}, + ) ) assert async_pager.next_page_token == "abc" responses = [] @@ -5986,52 +6873,60 @@ async def test_list_mute_configs_async_pager(): responses.append(response) assert len(responses) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in responses) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) @pytest.mark.asyncio -async def test_list_mute_configs_async_pages(): +async def test_list_descendant_security_health_analytics_custom_modules_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_mute_configs), + type(client.transport.list_descendant_security_health_analytics_custom_modules), "__call__", new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_mute_configs(request={}) + await client.list_descendant_security_health_analytics_custom_modules( + request={} + ) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6041,11 +6936,11 @@ async def test_list_mute_configs_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListNotificationConfigsRequest, + securitycenter_service.ListFindingsRequest, dict, ], ) -def test_list_notification_configs(request_type, transport: str = "grpc"): +def test_list_findings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6056,26 +6951,26 @@ def test_list_notification_configs(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse( + call.return_value = securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", + total_size=1086, ) - response = client.list_notification_configs(request) + response = client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) + assert isinstance(response, pagers.ListFindingsPager) assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_list_notification_configs_empty_call(): +def test_list_findings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6084,19 +6979,17 @@ def test_list_notification_configs_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - client.list_notification_configs() + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + client.list_findings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() @pytest.mark.asyncio -async def test_list_notification_configs_async( +async def test_list_findings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListNotificationConfigsRequest, + request_type=securitycenter_service.ListFindingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6108,49 +7001,47 @@ async def test_list_notification_configs_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse( + securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", + total_size=1086, ) ) - response = await client.list_notification_configs(request) + response = await client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListNotificationConfigsRequest() + assert args[0] == securitycenter_service.ListFindingsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert isinstance(response, pagers.ListFindingsAsyncPager) assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 @pytest.mark.asyncio -async def test_list_notification_configs_async_from_dict(): - await test_list_notification_configs_async(request_type=dict) +async def test_list_findings_async_from_dict(): + await test_list_findings_async(request_type=dict) -def test_list_notification_configs_field_headers(): +def test_list_findings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_notification_configs(request) + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + call.return_value = securitycenter_service.ListFindingsResponse() + client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -6166,25 +7057,23 @@ def test_list_notification_configs_field_headers(): @pytest.mark.asyncio -async def test_list_notification_configs_field_headers_async(): +async def test_list_findings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListFindingsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse() + securitycenter_service.ListFindingsResponse() ) - await client.list_notification_configs(request) + await client.list_findings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -6199,230 +7088,141 @@ async def test_list_notification_configs_field_headers_async(): ) in kw["metadata"] -def test_list_notification_configs_flattened(): +def test_list_findings_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - client.list_notification_configs( - parent="parent_value", + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token="abc", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[], + next_page_token="def", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + ], + ), + RuntimeError, ) - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_findings(request={}) -def test_list_notification_configs_flattened_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) + assert pager._metadata == metadata - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent="parent_value", + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in results ) -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListNotificationConfigsResponse() - - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListNotificationConfigsResponse() - ) - # Call the method with a truthy value for each flattened field, - # using the keyword arguments to the method. - response = await client.list_notification_configs( - parent="parent_value", - ) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - - -@pytest.mark.asyncio -async def test_list_notification_configs_flattened_error_async(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - await client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), - parent="parent_value", - ) - - -def test_list_notification_configs_pager(transport_name: str = "grpc"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, - ) - - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - next_page_token="abc", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], - next_page_token="def", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), - ) - pager = client.list_notification_configs(request={}) - - assert pager._metadata == metadata - - results = list(pager) - assert len(results) == 6 - assert all( - isinstance(i, notification_config.NotificationConfig) for i in results - ) - - -def test_list_notification_configs_pages(transport_name: str = "grpc"): +def test_list_findings_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_notification_configs), "__call__" - ) as call: + with mock.patch.object(type(client.transport.list_findings), "__call__") as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) - pages = list(client.list_notification_configs(request={}).pages) + pages = list(client.list_findings(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_notification_configs_async_pager(): +async def test_list_findings_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_notification_configs), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) - async_pager = await client.list_notification_configs( + async_pager = await client.list_findings( request={}, ) assert async_pager.next_page_token == "abc" @@ -6432,53 +7232,54 @@ async def test_list_notification_configs_async_pager(): assert len(responses) == 6 assert all( - isinstance(i, notification_config.NotificationConfig) for i in responses + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in responses ) @pytest.mark.asyncio -async def test_list_notification_configs_async_pages(): +async def test_list_findings_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_notification_configs), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.list_findings), "__call__", new_callable=mock.AsyncMock ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_notification_configs(request={}) + await client.list_findings(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6488,11 +7289,11 @@ async def test_list_notification_configs_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListSourcesRequest, + securitycenter_service.ListMuteConfigsRequest, dict, ], ) -def test_list_sources(request_type, transport: str = "grpc"): +def test_list_mute_configs(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6503,24 +7304,26 @@ def test_list_sources(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse( + call.return_value = securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", ) - response = client.list_sources(request) + response = client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) + assert isinstance(response, pagers.ListMuteConfigsPager) assert response.next_page_token == "next_page_token_value" -def test_list_sources_empty_call(): +def test_list_mute_configs_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6529,17 +7332,19 @@ def test_list_sources_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: - client.list_sources() + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: + client.list_mute_configs() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() @pytest.mark.asyncio -async def test_list_sources_async( +async def test_list_mute_configs_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListSourcesRequest, + request_type=securitycenter_service.ListMuteConfigsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6551,45 +7356,49 @@ async def test_list_sources_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse( + securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", ) ) - response = await client.list_sources(request) + response = await client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListSourcesRequest() + assert args[0] == securitycenter_service.ListMuteConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesAsyncPager) + assert isinstance(response, pagers.ListMuteConfigsAsyncPager) assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_list_sources_async_from_dict(): - await test_list_sources_async(request_type=dict) +async def test_list_mute_configs_async_from_dict(): + await test_list_mute_configs_async(request_type=dict) -def test_list_sources_field_headers(): +def test_list_mute_configs_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.ListMuteConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: - call.return_value = securitycenter_service.ListSourcesResponse() - client.list_sources(request) + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: + call.return_value = securitycenter_service.ListMuteConfigsResponse() + client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -6605,23 +7414,25 @@ def test_list_sources_field_headers(): @pytest.mark.asyncio -async def test_list_sources_field_headers_async(): +async def test_list_mute_configs_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.ListMuteConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse() + securitycenter_service.ListMuteConfigsResponse() ) - await client.list_sources(request) + await client.list_mute_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -6636,18 +7447,20 @@ async def test_list_sources_field_headers_async(): ) in kw["metadata"] -def test_list_sources_flattened(): +def test_list_mute_configs_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() + call.return_value = securitycenter_service.ListMuteConfigsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_sources( + client.list_mute_configs( parent="parent_value", ) @@ -6660,7 +7473,7 @@ def test_list_sources_flattened(): assert arg == mock_val -def test_list_sources_flattened_error(): +def test_list_mute_configs_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -6668,29 +7481,31 @@ def test_list_sources_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_list_sources_flattened_async(): +async def test_list_mute_configs_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListSourcesResponse() + call.return_value = securitycenter_service.ListMuteConfigsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListSourcesResponse() + securitycenter_service.ListMuteConfigsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_sources( + response = await client.list_mute_configs( parent="parent_value", ) @@ -6704,7 +7519,7 @@ async def test_list_sources_flattened_async(): @pytest.mark.asyncio -async def test_list_sources_flattened_error_async(): +async def test_list_mute_configs_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -6712,44 +7527,46 @@ async def test_list_sources_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_sources( - securitycenter_service.ListSourcesRequest(), + await client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", ) -def test_list_sources_pager(transport_name: str = "grpc"): +def test_list_mute_configs_pager(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, @@ -6759,95 +7576,99 @@ def test_list_sources_pager(transport_name: str = "grpc"): metadata = tuple(metadata) + ( gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), ) - pager = client.list_sources(request={}) + pager = client.list_mute_configs(request={}) assert pager._metadata == metadata results = list(pager) assert len(results) == 6 - assert all(isinstance(i, source.Source) for i in results) + assert all(isinstance(i, mute_config.MuteConfig) for i in results) -def test_list_sources_pages(transport_name: str = "grpc"): +def test_list_mute_configs_pages(transport_name: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials, transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + with mock.patch.object( + type(client.transport.list_mute_configs), "__call__" + ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) - pages = list(client.list_sources(request={}).pages) + pages = list(client.list_mute_configs(request={}).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_list_sources_async_pager(): +async def test_list_mute_configs_async_pager(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_mute_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) - async_pager = await client.list_sources( + async_pager = await client.list_mute_configs( request={}, ) assert async_pager.next_page_token == "abc" @@ -6856,50 +7677,52 @@ async def test_list_sources_async_pager(): responses.append(response) assert len(responses) == 6 - assert all(isinstance(i, source.Source) for i in responses) + assert all(isinstance(i, mute_config.MuteConfig) for i in responses) @pytest.mark.asyncio -async def test_list_sources_async_pages(): +async def test_list_mute_configs_async_pages(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + type(client.transport.list_mute_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: # Set the response to a series of pages. call.side_effect = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.ListSourcesResponse( - sources=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), RuntimeError, ) pages = [] async for page_ in ( - await client.list_sources(request={}) + await client.list_mute_configs(request={}) ).pages: # pragma: no branch pages.append(page_) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): @@ -6909,11 +7732,11 @@ async def test_list_sources_async_pages(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, + securitycenter_service.ListNotificationConfigsRequest, dict, ], ) -def test_run_asset_discovery(request_type, transport: str = "grpc"): +def test_list_notification_configs(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -6925,22 +7748,25 @@ def test_run_asset_discovery(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/spam") - response = client.run_asset_discovery(request) + call.return_value = securitycenter_service.ListNotificationConfigsResponse( + next_page_token="next_page_token_value", + ) + response = client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) + assert isinstance(response, pagers.ListNotificationConfigsPager) + assert response.next_page_token == "next_page_token_value" -def test_run_asset_discovery_empty_call(): +def test_list_notification_configs_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -6950,18 +7776,18 @@ def test_run_asset_discovery_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - client.run_asset_discovery() + client.list_notification_configs() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() @pytest.mark.asyncio -async def test_run_asset_discovery_async( +async def test_list_notification_configs_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.RunAssetDiscoveryRequest, + request_type=securitycenter_service.ListNotificationConfigsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -6974,45 +7800,48 @@ async def test_run_asset_discovery_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/spam") + securitycenter_service.ListNotificationConfigsResponse( + next_page_token="next_page_token_value", + ) ) - response = await client.run_asset_discovery(request) + response = await client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + assert args[0] == securitycenter_service.ListNotificationConfigsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, future.Future) + assert isinstance(response, pagers.ListNotificationConfigsAsyncPager) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_run_asset_discovery_async_from_dict(): - await test_run_asset_discovery_async(request_type=dict) +async def test_list_notification_configs_async_from_dict(): + await test_list_notification_configs_async(request_type=dict) -def test_run_asset_discovery_field_headers(): +def test_list_notification_configs_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.ListNotificationConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - call.return_value = operations_pb2.Operation(name="operations/op") - client.run_asset_discovery(request) + call.return_value = securitycenter_service.ListNotificationConfigsResponse() + client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7028,25 +7857,25 @@ def test_run_asset_discovery_field_headers(): @pytest.mark.asyncio -async def test_run_asset_discovery_field_headers_async(): +async def test_list_notification_configs_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.ListNotificationConfigsRequest() request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/op") + securitycenter_service.ListNotificationConfigsResponse() ) - await client.run_asset_discovery(request) + await client.list_notification_configs(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7061,20 +7890,20 @@ async def test_run_asset_discovery_field_headers_async(): ) in kw["metadata"] -def test_run_asset_discovery_flattened(): +def test_list_notification_configs_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/op") + call.return_value = securitycenter_service.ListNotificationConfigsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.run_asset_discovery( + client.list_notification_configs( parent="parent_value", ) @@ -7087,7 +7916,7 @@ def test_run_asset_discovery_flattened(): assert arg == mock_val -def test_run_asset_discovery_flattened_error(): +def test_list_notification_configs_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7095,31 +7924,31 @@ def test_run_asset_discovery_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), parent="parent_value", ) @pytest.mark.asyncio -async def test_run_asset_discovery_flattened_async(): +async def test_list_notification_configs_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.run_asset_discovery), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = operations_pb2.Operation(name="operations/op") + call.return_value = securitycenter_service.ListNotificationConfigsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - operations_pb2.Operation(name="operations/spam") + securitycenter_service.ListNotificationConfigsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.run_asset_discovery( + response = await client.list_notification_configs( parent="parent_value", ) @@ -7133,7 +7962,7 @@ async def test_run_asset_discovery_flattened_async(): @pytest.mark.asyncio -async def test_run_asset_discovery_flattened_error_async(): +async def test_list_notification_configs_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7141,177 +7970,354 @@ async def test_run_asset_discovery_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), + await client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.SetFindingStateRequest, - dict, - ], -) -def test_set_finding_state(request_type, transport: str = "grpc"): +def test_list_notification_configs_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, ) - response = client.set_finding_state(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_notification_configs(request={}) - # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance(i, notification_config.NotificationConfig) for i in results + ) -def test_set_finding_state_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. +def test_list_notification_configs_pages(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), "__call__" ) as call: - client.set_finding_state() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = list(client.list_notification_configs(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_set_finding_state_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.SetFindingStateRequest, -): +async def test_list_notification_configs_async_pager(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_notification_configs), + "__call__", + new_callable=mock.AsyncMock, ) as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", - ) + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, ) - response = await client.set_finding_state(request) + async_pager = await client.list_notification_configs( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) - _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetFindingStateRequest() + assert len(responses) == 6 + assert all( + isinstance(i, notification_config.NotificationConfig) for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_notification_configs_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_notification_configs), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + next_page_token="abc", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], + next_page_token="def", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_notification_configs(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, + dict, + ], +) +def test_list_effective_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager + ) + assert response.next_page_token == "next_page_token_value" + + +def test_list_effective_security_health_analytics_custom_modules_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + client.list_effective_security_health_analytics_custom_modules() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_set_finding_state_async_from_dict(): - await test_set_finding_state_async(request_type=dict) +async def test_list_effective_security_health_analytics_custom_modules_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_effective_security_health_analytics_custom_modules( + request + ) -def test_set_finding_state_field_headers(): + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert ( + args[0] + == securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) + + # Establish that the response is the type that we expect. + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesAsyncPager + ) + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_from_dict(): + await test_list_effective_security_health_analytics_custom_modules_async( + request_type=dict + ) + + +def test_list_effective_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = finding.Finding() - client.set_finding_state(request) + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_effective_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7322,28 +8328,33 @@ def test_set_finding_state_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_finding_state_field_headers_async(): +async def test_list_effective_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetFindingStateRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_finding_state(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + await client.list_effective_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7354,45 +8365,40 @@ async def test_set_finding_state_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_finding_state_flattened(): +def test_list_effective_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_finding_state( - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + client.list_effective_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( - seconds=751 - ) -def test_set_finding_state_flattened_error(): +def test_list_effective_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7400,53 +8406,48 @@ def test_set_finding_state_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_finding_state_flattened_async(): +async def test_list_effective_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.set_finding_state), "__call__" + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_finding_state( - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + response = await client.list_effective_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].state - mock_val = finding.Finding.State.ACTIVE + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val - assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( - seconds=751 - ) @pytest.mark.asyncio -async def test_set_finding_state_flattened_error_async(): +async def test_list_effective_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7454,76 +8455,281 @@ async def test_set_finding_state_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), - name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + await client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.SetMuteRequest, - dict, - ], -) -def test_set_mute(request_type, transport: str = "grpc"): +def test_list_effective_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, ) - response = client.set_mute(request) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_effective_security_health_analytics_custom_modules( + request={} + ) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + +def test_list_effective_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list( + client.list_effective_security_health_analytics_custom_modules( + request={} + ).pages + ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = ( + await client.list_effective_security_health_analytics_custom_modules( + request={}, + ) + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all( + isinstance( + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_effective_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_effective_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_effective_security_health_analytics_custom_modules( + request={} + ) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, + dict, + ], +) +def test_list_security_health_analytics_custom_modules( + request_type, transport: str = "grpc" +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) + ) + response = client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) + assert response.next_page_token == "next_page_token_value" -def test_set_mute_empty_call(): +def test_list_security_health_analytics_custom_modules_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -7532,16 +8738,22 @@ def test_set_mute_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - client.set_mute() + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + client.list_security_health_analytics_custom_modules() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) @pytest.mark.asyncio -async def test_set_mute_async( - transport: str = "grpc_asyncio", request_type=securitycenter_service.SetMuteRequest +async def test_list_security_health_analytics_custom_modules_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7553,71 +8765,56 @@ async def test_set_mute_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", ) ) - response = await client.set_mute(request) + response = await client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.SetMuteRequest() + assert ( + args[0] + == securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance( + response, pagers.ListSecurityHealthAnalyticsCustomModulesAsyncPager + ) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_set_mute_async_from_dict(): - await test_set_mute_async(request_type=dict) +async def test_list_security_health_analytics_custom_modules_async_from_dict(): + await test_list_security_health_analytics_custom_modules_async(request_type=dict) -def test_set_mute_field_headers(): +def test_list_security_health_analytics_custom_modules_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - call.return_value = finding.Finding() - client.set_mute(request) + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7628,26 +8825,30 @@ def test_set_mute_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_mute_field_headers_async(): +async def test_list_security_health_analytics_custom_modules_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.SetMuteRequest() + request = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() - request.name = "name_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) - await client.set_mute(request) + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) + await client.list_security_health_analytics_custom_modules(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7658,39 +8859,39 @@ async def test_set_mute_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_mute_flattened(): +def test_list_security_health_analytics_custom_modules_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_mute( - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.list_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_set_mute_flattened_error(): +def test_list_security_health_analytics_custom_modules_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7698,46 +8899,47 @@ def test_set_mute_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_mute_flattened_async(): +async def test_list_security_health_analytics_custom_modules_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: # Designate an appropriate return value for the call. - call.return_value = finding.Finding() + call.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_mute( - name="name_value", - mute=finding.Finding.Mute.MUTED, + response = await client.list_security_health_analytics_custom_modules( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" - assert arg == mock_val - arg = args[0].mute - mock_val = finding.Finding.Mute.MUTED + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_set_mute_flattened_error_async(): +async def test_list_security_health_analytics_custom_modules_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7745,21 +8947,234 @@ async def test_set_mute_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + await client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", + ) + + +def test_list_security_health_analytics_custom_modules_pager( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_security_health_analytics_custom_modules(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + +def test_list_security_health_analytics_custom_modules_pages( + transport_name: str = "grpc", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = list( + client.list_security_health_analytics_custom_modules(request={}).pages ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_security_health_analytics_custom_modules( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in responses + ) + + +@pytest.mark.asyncio +async def test_list_security_health_analytics_custom_modules_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_security_health_analytics_custom_modules), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_security_health_analytics_custom_modules(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.SetIamPolicyRequest, + securitycenter_service.ListSourcesRequest, dict, ], ) -def test_set_iam_policy(request_type, transport: str = "grpc"): +def test_list_sources(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -7770,26 +9185,24 @@ def test_set_iam_policy(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + call.return_value = securitycenter_service.ListSourcesResponse( + next_page_token="next_page_token_value", ) - response = client.set_iam_policy(request) + response = client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, pagers.ListSourcesPager) + assert response.next_page_token == "next_page_token_value" -def test_set_iam_policy_empty_call(): +def test_list_sources_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -7798,16 +9211,17 @@ def test_set_iam_policy_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - client.set_iam_policy() + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + client.list_sources() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() @pytest.mark.asyncio -async def test_set_iam_policy_async( - transport: str = "grpc_asyncio", request_type=iam_policy_pb2.SetIamPolicyRequest +async def test_list_sources_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListSourcesRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -7819,47 +9233,45 @@ async def test_set_iam_policy_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - policy_pb2.Policy( - version=774, - etag=b"etag_blob", + securitycenter_service.ListSourcesResponse( + next_page_token="next_page_token_value", ) ) - response = await client.set_iam_policy(request) + response = await client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.SetIamPolicyRequest() + assert args[0] == securitycenter_service.ListSourcesRequest() # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, pagers.ListSourcesAsyncPager) + assert response.next_page_token == "next_page_token_value" @pytest.mark.asyncio -async def test_set_iam_policy_async_from_dict(): - await test_set_iam_policy_async(request_type=dict) +async def test_list_sources_async_from_dict(): + await test_list_sources_async(request_type=dict) -def test_set_iam_policy_field_headers(): +def test_list_sources_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() + request = securitycenter_service.ListSourcesRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - call.return_value = policy_pb2.Policy() - client.set_iam_policy(request) + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + call.return_value = securitycenter_service.ListSourcesResponse() + client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -7870,26 +9282,28 @@ def test_set_iam_policy_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_set_iam_policy_field_headers_async(): +async def test_list_sources_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.SetIamPolicyRequest() + request = securitycenter_service.ListSourcesRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) - await client.set_iam_policy(request) + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSourcesResponse() + ) + await client.list_sources(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -7900,53 +9314,35 @@ async def test_set_iam_policy_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] -def test_set_iam_policy_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: - # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() - response = client.set_iam_policy( - request={ - "resource": "resource_value", - "policy": policy_pb2.Policy(version=774), - "update_mask": field_mask_pb2.FieldMask(paths=["paths_value"]), - } - ) - call.assert_called() - - -def test_set_iam_policy_flattened(): +def test_list_sources_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() + call.return_value = securitycenter_service.ListSourcesResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.set_iam_policy( - resource="resource_value", + client.list_sources( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_set_iam_policy_flattened_error(): +def test_list_sources_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7954,41 +9350,43 @@ def test_set_iam_policy_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource="resource_value", + client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_set_iam_policy_flattened_async(): +async def test_list_sources_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = policy_pb2.Policy() + call.return_value = securitycenter_service.ListSourcesResponse() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListSourcesResponse() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.set_iam_policy( - resource="resource_value", + response = await client.list_sources( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_set_iam_policy_flattened_error_async(): +async def test_list_sources_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -7996,125 +9394,307 @@ async def test_set_iam_policy_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), - resource="resource_value", + await client.list_sources( + securitycenter_service.ListSourcesRequest(), + parent="parent_value", ) -@pytest.mark.parametrize( - "request_type", - [ - iam_policy_pb2.TestIamPermissionsRequest, - dict, - ], -) -def test_test_iam_permissions(request_type, transport: str = "grpc"): +def test_list_sources_pager(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, ) - response = client.test_iam_permissions(request) - # Establish that the underlying gRPC stub method was called. - assert len(call.mock_calls) == 1 - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_sources(request={}) - # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, source.Source) for i in results) -def test_test_iam_permissions_empty_call(): - # This test is a coverage failsafe to make sure that totally empty calls, - # i.e. request == None and no flattened fields passed, work. +def test_list_sources_pages(transport_name: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="grpc", + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - client.test_iam_permissions() - call.assert_called() - _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + with mock.patch.object(type(client.transport.list_sources), "__call__") as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = list(client.list_sources(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.asyncio -async def test_test_iam_permissions_async( - transport: str = "grpc_asyncio", - request_type=iam_policy_pb2.TestIamPermissionsRequest, -): +async def test_list_sources_async_pager(): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials, ) - # Everything is optional in proto3 as far as the runtime is concerned, - # and we are mocking out the actual API, so just send an empty request. - request = request_type() - # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock ) as call: - # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], - ) + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, ) - response = await client.test_iam_permissions(request) + async_pager = await client.list_sources( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, source.Source) for i in responses) + + +@pytest.mark.asyncio +async def test_list_sources_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_sources), "__call__", new_callable=mock.AsyncMock + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), + ], + next_page_token="abc", + ), + securitycenter_service.ListSourcesResponse( + sources=[], + next_page_token="def", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_sources(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.RunAssetDiscoveryRequest, + dict, + ], +) +def test_run_asset_discovery(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = operations_pb2.Operation(name="operations/spam") + response = client.run_asset_discovery(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, future.Future) + + +def test_run_asset_discovery_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + client.run_asset_discovery() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() + + +@pytest.mark.asyncio +async def test_run_asset_discovery_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.RunAssetDiscoveryRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.run_asset_discovery), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + operations_pb2.Operation(name="operations/spam") + ) + response = await client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() + assert args[0] == securitycenter_service.RunAssetDiscoveryRequest() # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, future.Future) @pytest.mark.asyncio -async def test_test_iam_permissions_async_from_dict(): - await test_test_iam_permissions_async(request_type=dict) +async def test_run_asset_discovery_async_from_dict(): + await test_run_asset_discovery_async(request_type=dict) -def test_test_iam_permissions_field_headers(): +def test_run_asset_discovery_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.test_iam_permissions(request) + call.return_value = operations_pb2.Operation(name="operations/op") + client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8125,30 +9705,30 @@ def test_test_iam_permissions_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_test_iam_permissions_field_headers_async(): +async def test_run_asset_discovery_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() - request.resource = "resource_value" + request.parent = "parent_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse() + operations_pb2.Operation(name="operations/op") ) - await client.test_iam_permissions(request) + await client.run_asset_discovery(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8159,60 +9739,37 @@ async def test_test_iam_permissions_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "resource=resource_value", + "parent=parent_value", ) in kw["metadata"] -def test_test_iam_permissions_from_dict_foreign(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" - ) as call: - # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() - response = client.test_iam_permissions( - request={ - "resource": "resource_value", - "permissions": ["permissions_value"], - } - ) - call.assert_called() - - -def test_test_iam_permissions_flattened(): +def test_run_asset_discovery_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + call.return_value = operations_pb2.Operation(name="operations/op") # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.test_iam_permissions( - resource="resource_value", - permissions=["permissions_value"], + client.run_asset_discovery( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" - assert arg == mock_val - arg = args[0].permissions - mock_val = ["permissions_value"] + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val -def test_test_iam_permissions_flattened_error(): +def test_run_asset_discovery_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8220,50 +9777,45 @@ def test_test_iam_permissions_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent="parent_value", ) @pytest.mark.asyncio -async def test_test_iam_permissions_flattened_async(): +async def test_run_asset_discovery_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.test_iam_permissions), "__call__" + type(client.transport.run_asset_discovery), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + call.return_value = operations_pb2.Operation(name="operations/op") call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - iam_policy_pb2.TestIamPermissionsResponse() + operations_pb2.Operation(name="operations/spam") ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.test_iam_permissions( - resource="resource_value", - permissions=["permissions_value"], + response = await client.run_asset_discovery( + parent="parent_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].resource - mock_val = "resource_value" - assert arg == mock_val - arg = args[0].permissions - mock_val = ["permissions_value"] + arg = args[0].parent + mock_val = "parent_value" assert arg == mock_val @pytest.mark.asyncio -async def test_test_iam_permissions_flattened_error_async(): +async def test_run_asset_discovery_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8271,21 +9823,20 @@ async def test_test_iam_permissions_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + await client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), + parent="parent_value", ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateExternalSystemRequest, + securitycenter_service.SetFindingStateRequest, dict, ], ) -def test_update_external_system(request_type, transport: str = "grpc"): +def test_set_finding_state(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8297,31 +9848,53 @@ def test_update_external_system(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem( + call.return_value = finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_external_system(request) + response = client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_external_system_empty_call(): +def test_set_finding_state_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8331,18 +9904,18 @@ def test_update_external_system_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - client.update_external_system() + client.set_finding_state() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() @pytest.mark.asyncio -async def test_update_external_system_async( +async def test_set_finding_state_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateExternalSystemRequest, + request_type=securitycenter_service.SetFindingStateRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8355,54 +9928,76 @@ async def test_update_external_system_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem( + finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_external_system(request) + response = await client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateExternalSystemRequest() + assert args[0] == securitycenter_service.SetFindingStateRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_external_system_async_from_dict(): - await test_update_external_system_async(request_type=dict) +async def test_set_finding_state_async_from_dict(): + await test_set_finding_state_async(request_type=dict) -def test_update_external_system_field_headers(): +def test_set_finding_state_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() + request = securitycenter_service.SetFindingStateRequest() - request.external_system.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - call.return_value = gcs_external_system.ExternalSystem() - client.update_external_system(request) + call.return_value = finding.Finding() + client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8413,30 +10008,28 @@ def test_update_external_system_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "external_system.name=name_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_external_system_field_headers_async(): +async def test_set_finding_state_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateExternalSystemRequest() + request = securitycenter_service.SetFindingStateRequest() - request.external_system.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem() - ) - await client.update_external_system(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_finding_state(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8447,41 +10040,45 @@ async def test_update_external_system_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "external_system.name=name_value", + "name=name_value", ) in kw["metadata"] -def test_update_external_system_flattened(): +def test_set_finding_state_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() + call.return_value = finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_finding_state( + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name="name_value") + arg = args[0].name + mock_val = "name_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( + seconds=751 + ) -def test_update_external_system_flattened_error(): +def test_set_finding_state_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8489,50 +10086,53 @@ def test_update_external_system_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) @pytest.mark.asyncio -async def test_update_external_system_flattened_async(): +async def test_set_finding_state_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_external_system), "__call__" + type(client.transport.set_finding_state), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_external_system.ExternalSystem() + call.return_value = finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_external_system.ExternalSystem() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_external_system( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.set_finding_state( + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].external_system - mock_val = gcs_external_system.ExternalSystem(name="name_value") + arg = args[0].name + mock_val = "name_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].state + mock_val = finding.Finding.State.ACTIVE assert arg == mock_val + assert TimestampRule().to_proto(args[0].start_time) == timestamp_pb2.Timestamp( + seconds=751 + ) @pytest.mark.asyncio -async def test_update_external_system_flattened_error_async(): +async def test_set_finding_state_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8540,21 +10140,22 @@ async def test_update_external_system_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateFindingRequest, + securitycenter_service.SetMuteRequest, dict, ], ) -def test_update_finding(request_type, transport: str = "grpc"): +def test_set_mute(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8565,50 +10166,52 @@ def test_update_finding(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding( + call.return_value = finding.Finding( name="name_value", parent="parent_value", resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, + state=finding.Finding.State.ACTIVE, category="category_value", external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, + severity=finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, mute_initiator="mute_initiator_value", parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_finding(request) + response = client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) + assert isinstance(response, finding.Finding) assert response.name == "name_value" assert response.parent == "parent_value" assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.state == finding.Finding.State.ACTIVE assert response.category == "category_value" assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.severity == finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT assert response.mute_initiator == "mute_initiator_value" assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_finding_empty_call(): +def test_set_mute_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8617,17 +10220,16 @@ def test_update_finding_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - client.update_finding() + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + client.set_mute() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() @pytest.mark.asyncio -async def test_update_finding_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateFindingRequest, +async def test_set_mute_async( + transport: str = "grpc_asyncio", request_type=securitycenter_service.SetMuteRequest ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8639,71 +10241,73 @@ async def test_update_finding_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_finding.Finding( + finding.Finding( name="name_value", parent="parent_value", resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, + state=finding.Finding.State.ACTIVE, category="category_value", external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, + severity=finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, mute_initiator="mute_initiator_value", parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_finding(request) + response = await client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateFindingRequest() + assert args[0] == securitycenter_service.SetMuteRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) + assert isinstance(response, finding.Finding) assert response.name == "name_value" assert response.parent == "parent_value" assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.state == finding.Finding.State.ACTIVE assert response.category == "category_value" assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.severity == finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT assert response.mute_initiator == "mute_initiator_value" assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_finding_async_from_dict(): - await test_update_finding_async(request_type=dict) +async def test_set_mute_async_from_dict(): + await test_set_mute_async(request_type=dict) -def test_update_finding_field_headers(): +def test_set_mute_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() + request = securitycenter_service.SetMuteRequest() - request.finding.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - call.return_value = gcs_finding.Finding() - client.update_finding(request) + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + call.return_value = finding.Finding() + client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8714,26 +10318,26 @@ def test_update_finding_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "finding.name=name_value", + "name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_finding_field_headers_async(): +async def test_set_mute_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateFindingRequest() + request = securitycenter_service.SetMuteRequest() - request.finding.name = "name_value" + request.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) - await client.update_finding(request) + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) + await client.set_mute(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -8744,35 +10348,39 @@ async def test_update_finding_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "finding.name=name_value", + "name=name_value", ) in kw["metadata"] -def test_update_finding_flattened(): +def test_set_mute_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() + call.return_value = finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_finding( - finding=gcs_finding.Finding(name="name_value"), + client.set_mute( + name="name_value", + mute=finding.Finding.Mute.MUTED, ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name="name_value") + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED assert arg == mock_val -def test_update_finding_flattened_error(): +def test_set_mute_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8780,41 +10388,46 @@ def test_update_finding_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + client.set_mute( + securitycenter_service.SetMuteRequest(), + name="name_value", + mute=finding.Finding.Mute.MUTED, ) @pytest.mark.asyncio -async def test_update_finding_flattened_async(): +async def test_set_mute_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + with mock.patch.object(type(client.transport.set_mute), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_finding.Finding() + call.return_value = finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_finding( - finding=gcs_finding.Finding(name="name_value"), + response = await client.set_mute( + name="name_value", + mute=finding.Finding.Mute.MUTED, ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].finding - mock_val = gcs_finding.Finding(name="name_value") + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + arg = args[0].mute + mock_val = finding.Finding.Mute.MUTED assert arg == mock_val @pytest.mark.asyncio -async def test_update_finding_flattened_error_async(): +async def test_set_mute_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -8822,20 +10435,21 @@ async def test_update_finding_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + await client.set_mute( + securitycenter_service.SetMuteRequest(), + name="name_value", + mute=finding.Finding.Mute.MUTED, ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateMuteConfigRequest, + iam_policy_pb2.SetIamPolicyRequest, dict, ], ) -def test_update_mute_config(request_type, transport: str = "grpc"): +def test_set_iam_policy(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -8846,34 +10460,26 @@ def test_update_mute_config(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + call.return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) - response = client.update_mute_config(request) + response = client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" -def test_update_mute_config_empty_call(): +def test_set_iam_policy_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -8882,19 +10488,16 @@ def test_update_mute_config_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - client.update_mute_config() + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + client.set_iam_policy() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() @pytest.mark.asyncio -async def test_update_mute_config_async( - transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateMuteConfigRequest, +async def test_set_iam_policy_async( + transport: str = "grpc_asyncio", request_type=iam_policy_pb2.SetIamPolicyRequest ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -8906,57 +10509,47 @@ async def test_update_mute_config_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) ) - response = await client.update_mute_config(request) + response = await client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateMuteConfigRequest() + assert args[0] == iam_policy_pb2.SetIamPolicyRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" @pytest.mark.asyncio -async def test_update_mute_config_async_from_dict(): - await test_update_mute_config_async(request_type=dict) +async def test_set_iam_policy_async_from_dict(): + await test_set_iam_policy_async(request_type=dict) -def test_update_mute_config_field_headers(): +def test_set_iam_policy_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() + request = iam_policy_pb2.SetIamPolicyRequest() - request.mute_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - call.return_value = gcs_mute_config.MuteConfig() - client.update_mute_config(request) + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + call.return_value = policy_pb2.Policy() + client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -8967,30 +10560,26 @@ def test_update_mute_config_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "mute_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_mute_config_field_headers_async(): +async def test_set_iam_policy_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateMuteConfigRequest() + request = iam_policy_pb2.SetIamPolicyRequest() - request.mute_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig() - ) - await client.update_mute_config(request) + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) + await client.set_iam_policy(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9001,41 +10590,53 @@ async def test_update_mute_config_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "mute_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] -def test_update_mute_config_flattened(): +def test_set_iam_policy_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: + # Designate an appropriate return value for the call. + call.return_value = policy_pb2.Policy() + response = client.set_iam_policy( + request={ + "resource": "resource_value", + "policy": policy_pb2.Policy(version=774), + "update_mask": field_mask_pb2.FieldMask(paths=["paths_value"]), + } + ) + call.assert_called() + + +def test_set_iam_policy_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() + call.return_value = policy_pb2.Policy() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_iam_policy( + resource="resource_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name="name_value") - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val -def test_update_mute_config_flattened_error(): +def test_set_iam_policy_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9043,50 +10644,41 @@ def test_update_mute_config_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) @pytest.mark.asyncio -async def test_update_mute_config_flattened_async(): +async def test_set_iam_policy_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.update_mute_config), "__call__" - ) as call: + with mock.patch.object(type(client.transport.set_iam_policy), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_mute_config.MuteConfig() + call.return_value = policy_pb2.Policy() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_mute_config.MuteConfig() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(policy_pb2.Policy()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_mute_config( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.set_iam_policy( + resource="resource_value", ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].mute_config - mock_val = gcs_mute_config.MuteConfig(name="name_value") - assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val @pytest.mark.asyncio -async def test_update_mute_config_flattened_error_async(): +async def test_set_iam_policy_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9094,21 +10686,20 @@ async def test_update_mute_config_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, + iam_policy_pb2.TestIamPermissionsRequest, dict, ], ) -def test_update_notification_config(request_type, transport: str = "grpc"): +def test_test_iam_permissions(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9120,34 +10711,25 @@ def test_update_notification_config(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + call.return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) - response = client.update_notification_config(request) + response = client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_update_notification_config_empty_call(): +def test_test_iam_permissions_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9157,18 +10739,18 @@ def test_update_notification_config_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: - client.update_notification_config() + client.test_iam_permissions() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() @pytest.mark.asyncio -async def test_update_notification_config_async( +async def test_test_iam_permissions_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateNotificationConfigRequest, + request_type=iam_policy_pb2.TestIamPermissionsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9181,54 +10763,48 @@ async def test_update_notification_config_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", + iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) ) - response = await client.update_notification_config(request) + response = await client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() + assert args[0] == iam_policy_pb2.TestIamPermissionsRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] @pytest.mark.asyncio -async def test_update_notification_config_async_from_dict(): - await test_update_notification_config_async(request_type=dict) +async def test_test_iam_permissions_async_from_dict(): + await test_test_iam_permissions_async(request_type=dict) -def test_update_notification_config_field_headers(): +def test_test_iam_permissions_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() - request.notification_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: - call.return_value = gcs_notification_config.NotificationConfig() - client.update_notification_config(request) + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9239,30 +10815,30 @@ def test_update_notification_config_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "notification_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_notification_config_field_headers_async(): +async def test_test_iam_permissions_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateNotificationConfigRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() - request.notification_config.name = "name_value" + request.resource = "resource_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig() + iam_policy_pb2.TestIamPermissionsResponse() ) - await client.update_notification_config(request) + await client.test_iam_permissions(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9273,43 +10849,60 @@ async def test_update_notification_config_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "notification_config.name=name_value", + "resource=resource_value", ) in kw["metadata"] -def test_update_notification_config_flattened(): +def test_test_iam_permissions_from_dict_foreign(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.test_iam_permissions), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() + response = client.test_iam_permissions( + request={ + "resource": "resource_value", + "permissions": ["permissions_value"], + } + ) + call.assert_called() + + +def test_test_iam_permissions_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.test_iam_permissions( + resource="resource_value", + permissions=["permissions_value"], ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name="name_value") + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].permissions + mock_val = ["permissions_value"] assert arg == mock_val -def test_update_notification_config_flattened_error(): +def test_test_iam_permissions_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9317,54 +10910,50 @@ def test_update_notification_config_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource="resource_value", + permissions=["permissions_value"], ) @pytest.mark.asyncio -async def test_update_notification_config_flattened_async(): +async def test_test_iam_permissions_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_notification_config), "__call__" + type(client.transport.test_iam_permissions), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_notification_config.NotificationConfig() + call.return_value = iam_policy_pb2.TestIamPermissionsResponse() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_notification_config.NotificationConfig() + iam_policy_pb2.TestIamPermissionsResponse() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_notification_config( - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + response = await client.test_iam_permissions( + resource="resource_value", + permissions=["permissions_value"], ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].notification_config - mock_val = gcs_notification_config.NotificationConfig(name="name_value") + arg = args[0].resource + mock_val = "resource_value" assert arg == mock_val - arg = args[0].update_mask - mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + arg = args[0].permissions + mock_val = ["permissions_value"] assert arg == mock_val @pytest.mark.asyncio -async def test_update_notification_config_flattened_error_async(): +async def test_test_iam_permissions_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9372,23 +10961,21 @@ async def test_update_notification_config_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + await client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), + resource="resource_value", + permissions=["permissions_value"], ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, + securitycenter_service.UpdateExternalSystemRequest, dict, ], ) -def test_update_organization_settings(request_type, transport: str = "grpc"): +def test_update_external_system(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9400,27 +10987,31 @@ def test_update_organization_settings(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings( + call.return_value = gcs_external_system.ExternalSystem( name="name_value", - enable_asset_discovery=True, + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) - response = client.update_organization_settings(request) + response = client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance(response, gcs_external_system.ExternalSystem) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" -def test_update_organization_settings_empty_call(): +def test_update_external_system_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9430,18 +11021,18 @@ def test_update_organization_settings_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: - client.update_organization_settings() + client.update_external_system() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() @pytest.mark.asyncio -async def test_update_organization_settings_async( +async def test_update_external_system_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, + request_type=securitycenter_service.UpdateExternalSystemRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9454,50 +11045,54 @@ async def test_update_organization_settings_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings( + gcs_external_system.ExternalSystem( name="name_value", - enable_asset_discovery=True, + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) ) - response = await client.update_organization_settings(request) + response = await client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() + assert args[0] == securitycenter_service.UpdateExternalSystemRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance(response, gcs_external_system.ExternalSystem) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" @pytest.mark.asyncio -async def test_update_organization_settings_async_from_dict(): - await test_update_organization_settings_async(request_type=dict) +async def test_update_external_system_async_from_dict(): + await test_update_external_system_async(request_type=dict) -def test_update_organization_settings_field_headers(): +def test_update_external_system_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() - request.organization_settings.name = "name_value" + request.external_system.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: - call.return_value = gcs_organization_settings.OrganizationSettings() - client.update_organization_settings(request) + call.return_value = gcs_external_system.ExternalSystem() + client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9508,30 +11103,30 @@ def test_update_organization_settings_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "organization_settings.name=name_value", + "external_system.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_organization_settings_field_headers_async(): +async def test_update_external_system_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() - request.organization_settings.name = "name_value" + request.external_system.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings() + gcs_external_system.ExternalSystem() ) - await client.update_organization_settings(request) + await client.update_external_system(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9542,39 +11137,41 @@ async def test_update_organization_settings_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "organization_settings.name=name_value", + "external_system.name=name_value", ) in kw["metadata"] -def test_update_organization_settings_flattened(): +def test_update_external_system_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() + call.return_value = gcs_external_system.ExternalSystem() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_organization_settings_flattened_error(): +def test_update_external_system_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9582,49 +11179,50 @@ def test_update_organization_settings_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_organization_settings_flattened_async(): +async def test_update_external_system_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_organization_settings), "__call__" + type(client.transport.update_external_system), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_organization_settings.OrganizationSettings() + call.return_value = gcs_external_system.ExternalSystem() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_organization_settings.OrganizationSettings() + gcs_external_system.ExternalSystem() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_organization_settings( - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + response = await client.update_external_system( + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].organization_settings - mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") + arg = args[0].external_system + mock_val = gcs_external_system.ExternalSystem(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_update_organization_settings_flattened_error_async(): +async def test_update_external_system_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9632,22 +11230,21 @@ async def test_update_organization_settings_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( - name="name_value" - ), + await client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateSourceRequest, + securitycenter_service.UpdateFindingRequest, dict, ], ) -def test_update_source(request_type, transport: str = "grpc"): +def test_update_finding(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9658,30 +11255,52 @@ def test_update_source(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source( + call.return_value = gcs_finding.Finding( name="name_value", - display_name="display_name_value", - description="description_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) - response = client.update_source(request) + response = client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_source_empty_call(): +def test_update_finding_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9690,17 +11309,17 @@ def test_update_source_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - client.update_source() + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + client.update_finding() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() @pytest.mark.asyncio -async def test_update_source_async( +async def test_update_finding_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateSourceRequest, + request_type=securitycenter_service.UpdateFindingRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9712,51 +11331,73 @@ async def test_update_source_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_source.Source( + gcs_finding.Finding( name="name_value", - display_name="display_name_value", - description="description_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) ) - response = await client.update_source(request) + response = await client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSourceRequest() + assert args[0] == securitycenter_service.UpdateFindingRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" @pytest.mark.asyncio -async def test_update_source_async_from_dict(): - await test_update_source_async(request_type=dict) +async def test_update_finding_async_from_dict(): + await test_update_finding_async(request_type=dict) -def test_update_source_field_headers(): +def test_update_finding_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() + request = securitycenter_service.UpdateFindingRequest() - request.source.name = "name_value" + request.finding.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - call.return_value = gcs_source.Source() - client.update_source(request) + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + call.return_value = gcs_finding.Finding() + client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -9767,26 +11408,26 @@ def test_update_source_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "source.name=name_value", + "finding.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_source_field_headers_async(): +async def test_update_finding_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSourceRequest() + request = securitycenter_service.UpdateFindingRequest() - request.source.name = "name_value" + request.finding.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) - await client.update_source(request) + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) + await client.update_finding(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -9797,35 +11438,35 @@ async def test_update_source_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "source.name=name_value", + "finding.name=name_value", ) in kw["metadata"] -def test_update_source_flattened(): +def test_update_finding_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() + call.return_value = gcs_finding.Finding() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_source( - source=gcs_source.Source(name="name_value"), + client.update_finding( + finding=gcs_finding.Finding(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name="name_value") + arg = args[0].finding + mock_val = gcs_finding.Finding(name="name_value") assert arg == mock_val -def test_update_source_flattened_error(): +def test_update_finding_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9833,41 +11474,41 @@ def test_update_source_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name="name_value"), + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), ) @pytest.mark.asyncio -async def test_update_source_flattened_async(): +async def test_update_finding_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object(type(client.transport.update_source), "__call__") as call: + with mock.patch.object(type(client.transport.update_finding), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = gcs_source.Source() + call.return_value = gcs_finding.Finding() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_finding.Finding()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_source( - source=gcs_source.Source(name="name_value"), + response = await client.update_finding( + finding=gcs_finding.Finding(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].source - mock_val = gcs_source.Source(name="name_value") + arg = args[0].finding + mock_val = gcs_finding.Finding(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_update_source_flattened_error_async(): +async def test_update_finding_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -9875,20 +11516,20 @@ async def test_update_source_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_source( - securitycenter_service.UpdateSourceRequest(), - source=gcs_source.Source(name="name_value"), + await client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateSecurityMarksRequest, + securitycenter_service.UpdateMuteConfigRequest, dict, ], ) -def test_update_security_marks(request_type, transport: str = "grpc"): +def test_update_mute_config(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -9900,27 +11541,33 @@ def test_update_security_marks(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks( + call.return_value = gcs_mute_config.MuteConfig( name="name_value", - canonical_name="canonical_name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) - response = client.update_security_marks(request) + response = client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) + assert isinstance(response, gcs_mute_config.MuteConfig) assert response.name == "name_value" - assert response.canonical_name == "canonical_name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" -def test_update_security_marks_empty_call(): +def test_update_mute_config_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -9930,18 +11577,18 @@ def test_update_security_marks_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: - client.update_security_marks() + client.update_mute_config() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() @pytest.mark.asyncio -async def test_update_security_marks_async( +async def test_update_mute_config_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateSecurityMarksRequest, + request_type=securitycenter_service.UpdateMuteConfigRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -9954,50 +11601,56 @@ async def test_update_security_marks_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks( + gcs_mute_config.MuteConfig( name="name_value", - canonical_name="canonical_name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) ) - response = await client.update_security_marks(request) + response = await client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + assert args[0] == securitycenter_service.UpdateMuteConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_security_marks.SecurityMarks) + assert isinstance(response, gcs_mute_config.MuteConfig) assert response.name == "name_value" - assert response.canonical_name == "canonical_name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" @pytest.mark.asyncio -async def test_update_security_marks_async_from_dict(): - await test_update_security_marks_async(request_type=dict) +async def test_update_mute_config_async_from_dict(): + await test_update_mute_config_async(request_type=dict) -def test_update_security_marks_field_headers(): +def test_update_mute_config_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() + request = securitycenter_service.UpdateMuteConfigRequest() - request.security_marks.name = "name_value" + request.mute_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: - call.return_value = gcs_security_marks.SecurityMarks() - client.update_security_marks(request) + call.return_value = gcs_mute_config.MuteConfig() + client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10008,30 +11661,30 @@ def test_update_security_marks_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "security_marks.name=name_value", + "mute_config.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_security_marks_field_headers_async(): +async def test_update_mute_config_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateSecurityMarksRequest() + request = securitycenter_service.UpdateMuteConfigRequest() - request.security_marks.name = "name_value" + request.mute_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks() + gcs_mute_config.MuteConfig() ) - await client.update_security_marks(request) + await client.update_mute_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10042,37 +11695,41 @@ async def test_update_security_marks_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "security_marks.name=name_value", + "mute_config.name=name_value", ) in kw["metadata"] -def test_update_security_marks_flattened(): +def test_update_mute_config_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() + call.return_value = gcs_mute_config.MuteConfig() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name="name_value") + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_security_marks_flattened_error(): +def test_update_mute_config_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10080,45 +11737,50 @@ def test_update_security_marks_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_security_marks_flattened_async(): +async def test_update_mute_config_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_security_marks), "__call__" + type(client.transport.update_mute_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = gcs_security_marks.SecurityMarks() + call.return_value = gcs_mute_config.MuteConfig() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - gcs_security_marks.SecurityMarks() + gcs_mute_config.MuteConfig() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_security_marks( - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + response = await client.update_mute_config( + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].security_marks - mock_val = gcs_security_marks.SecurityMarks(name="name_value") + arg = args[0].mute_config + mock_val = gcs_mute_config.MuteConfig(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_update_security_marks_flattened_error_async(): +async def test_update_mute_config_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10126,20 +11788,21 @@ async def test_update_security_marks_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_security_marks( - securitycenter_service.UpdateSecurityMarksRequest(), - security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + await client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateBigQueryExportRequest, + securitycenter_service.UpdateNotificationConfigRequest, dict, ], ) -def test_create_big_query_export(request_type, transport: str = "grpc"): +def test_update_notification_config(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10151,35 +11814,34 @@ def test_create_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( + call.return_value = gcs_notification_config.NotificationConfig( name="name_value", description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), ) - response = client.create_big_query_export(request) + response = client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" -def test_create_big_query_export_empty_call(): +def test_update_notification_config_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10189,18 +11851,18 @@ def test_create_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: - client.create_big_query_export() + client.update_notification_config() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() @pytest.mark.asyncio -async def test_create_big_query_export_async( +async def test_update_notification_config_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.CreateBigQueryExportRequest, + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10213,58 +11875,54 @@ async def test_create_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport( + gcs_notification_config.NotificationConfig( name="name_value", description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", ) ) - response = await client.create_big_query_export(request) + response = await client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateNotificationConfigRequest() # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" @pytest.mark.asyncio -async def test_create_big_query_export_async_from_dict(): - await test_create_big_query_export_async(request_type=dict) +async def test_update_notification_config_async_from_dict(): + await test_update_notification_config_async(request_type=dict) -def test_create_big_query_export_field_headers(): +def test_update_notification_config_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() - request.parent = "parent_value" + request.notification_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: - call.return_value = bigquery_export.BigQueryExport() - client.create_big_query_export(request) + call.return_value = gcs_notification_config.NotificationConfig() + client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10275,30 +11933,30 @@ def test_create_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "notification_config.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_create_big_query_export_field_headers_async(): +async def test_update_notification_config_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.CreateBigQueryExportRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() - request.parent = "parent_value" + request.notification_config.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_notification_config.NotificationConfig() ) - await client.create_big_query_export(request) + await client.update_notification_config(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10309,45 +11967,43 @@ async def test_create_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "notification_config.name=name_value", ) in kw["metadata"] -def test_create_big_query_export_flattened(): +def test_update_notification_config_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = gcs_notification_config.NotificationConfig() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.create_big_query_export( - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name="name_value") assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = "big_query_export_id_value" + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_create_big_query_export_flattened_error(): +def test_update_notification_config_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10355,55 +12011,54 @@ def test_create_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_create_big_query_export_flattened_async(): +async def test_update_notification_config_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.create_big_query_export), "__call__" + type(client.transport.update_notification_config), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = gcs_notification_config.NotificationConfig() call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_notification_config.NotificationConfig() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.create_big_query_export( - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + response = await client.update_notification_config( + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" - assert arg == mock_val - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].notification_config + mock_val = gcs_notification_config.NotificationConfig(name="name_value") assert arg == mock_val - arg = args[0].big_query_export_id - mock_val = "big_query_export_id_value" + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val @pytest.mark.asyncio -async def test_create_big_query_export_flattened_error_async(): +async def test_update_notification_config_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10411,22 +12066,23 @@ async def test_create_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.create_big_query_export( - securitycenter_service.CreateBigQueryExportRequest(), - parent="parent_value", - big_query_export=bigquery_export.BigQueryExport(name="name_value"), - big_query_export_id="big_query_export_id_value", + await client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteBigQueryExportRequest, + securitycenter_service.UpdateOrganizationSettingsRequest, dict, ], ) -def test_delete_big_query_export(request_type, transport: str = "grpc"): +def test_update_organization_settings(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10438,22 +12094,27 @@ def test_delete_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None - response = client.delete_big_query_export(request) + call.return_value = gcs_organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) + response = client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True -def test_delete_big_query_export_empty_call(): +def test_update_organization_settings_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10463,18 +12124,18 @@ def test_delete_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - client.delete_big_query_export() + client.update_organization_settings() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() @pytest.mark.asyncio -async def test_delete_big_query_export_async( +async def test_update_organization_settings_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.DeleteBigQueryExportRequest, + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10487,43 +12148,50 @@ async def test_delete_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - response = await client.delete_big_query_export(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) + ) + response = await client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + assert args[0] == securitycenter_service.UpdateOrganizationSettingsRequest() # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True @pytest.mark.asyncio -async def test_delete_big_query_export_async_from_dict(): - await test_delete_big_query_export_async(request_type=dict) +async def test_update_organization_settings_async_from_dict(): + await test_update_organization_settings_async(request_type=dict) -def test_delete_big_query_export_field_headers(): +def test_update_organization_settings_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() - request.name = "name_value" + request.organization_settings.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - call.return_value = None - client.delete_big_query_export(request) + call.return_value = gcs_organization_settings.OrganizationSettings() + client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10534,28 +12202,30 @@ def test_delete_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "organization_settings.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_delete_big_query_export_field_headers_async(): +async def test_update_organization_settings_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.DeleteBigQueryExportRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() - request.name = "name_value" + request.organization_settings.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) - await client.delete_big_query_export(request) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings() + ) + await client.update_organization_settings(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10566,37 +12236,39 @@ async def test_delete_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "name=name_value", + "organization_settings.name=name_value", ) in kw["metadata"] -def test_delete_big_query_export_flattened(): +def test_update_organization_settings_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None + call.return_value = gcs_organization_settings.OrganizationSettings() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.delete_big_query_export( - name="name_value", + client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") assert arg == mock_val -def test_delete_big_query_export_flattened_error(): +def test_update_organization_settings_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10604,43 +12276,49 @@ def test_delete_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name="name_value", + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) @pytest.mark.asyncio -async def test_delete_big_query_export_flattened_async(): +async def test_update_organization_settings_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.delete_big_query_export), "__call__" + type(client.transport.update_organization_settings), "__call__" ) as call: # Designate an appropriate return value for the call. - call.return_value = None + call.return_value = gcs_organization_settings.OrganizationSettings() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_organization_settings.OrganizationSettings() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.delete_big_query_export( - name="name_value", + response = await client.update_organization_settings( + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].name - mock_val = "name_value" + arg = args[0].organization_settings + mock_val = gcs_organization_settings.OrganizationSettings(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_delete_big_query_export_flattened_error_async(): +async def test_update_organization_settings_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10648,20 +12326,24 @@ async def test_delete_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.delete_big_query_export( - securitycenter_service.DeleteBigQueryExportRequest(), - name="name_value", + await client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( + name="name_value" + ), ) @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateBigQueryExportRequest, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_update_big_query_export(request_type, transport: str = "grpc"): +def test_update_security_health_analytics_custom_module( + request_type, transport: str = "grpc" +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10673,35 +12355,43 @@ def test_update_big_query_export(request_type, transport: str = "grpc"): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport( + call.return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) - response = client.update_big_query_export(request) + response = client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_update_big_query_export_empty_call(): +def test_update_security_health_analytics_custom_module_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10711,18 +12401,22 @@ def test_update_big_query_export_empty_call(): # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: - client.update_big_query_export() + client.update_security_health_analytics_custom_module() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) @pytest.mark.asyncio -async def test_update_big_query_export_async( +async def test_update_security_health_analytics_custom_module_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.UpdateBigQueryExportRequest, + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -10735,58 +12429,69 @@ async def test_update_big_query_export_async( # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) ) - response = await client.update_big_query_export(request) + response = await client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + assert ( + args[0] + == securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" @pytest.mark.asyncio -async def test_update_big_query_export_async_from_dict(): - await test_update_big_query_export_async(request_type=dict) +async def test_update_security_health_analytics_custom_module_async_from_dict(): + await test_update_security_health_analytics_custom_module_async(request_type=dict) -def test_update_big_query_export_field_headers(): +def test_update_security_health_analytics_custom_module_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - request.big_query_export.name = "name_value" + request.security_health_analytics_custom_module.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: - call.return_value = bigquery_export.BigQueryExport() - client.update_big_query_export(request) + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -10797,30 +12502,31 @@ def test_update_big_query_export_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "big_query_export.name=name_value", + "security_health_analytics_custom_module.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_update_big_query_export_field_headers_async(): +async def test_update_security_health_analytics_custom_module_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.UpdateBigQueryExportRequest() + request = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() - request.big_query_export.name = "name_value" + request.security_health_analytics_custom_module.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - await client.update_big_query_export(request) + await client.update_security_health_analytics_custom_module(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -10831,25 +12537,30 @@ async def test_update_big_query_export_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "big_query_export.name=name_value", + "security_health_analytics_custom_module.name=name_value", ) in kw["metadata"] -def test_update_big_query_export_flattened(): +def test_update_security_health_analytics_custom_module_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10857,15 +12568,17 @@ def test_update_big_query_export_flattened(): # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) assert arg == mock_val arg = args[0].update_mask mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) assert arg == mock_val -def test_update_big_query_export_flattened_error(): +def test_update_security_health_analytics_custom_module_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10873,33 +12586,40 @@ def test_update_big_query_export_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @pytest.mark.asyncio -async def test_update_big_query_export_flattened_async(): +async def test_update_security_health_analytics_custom_module_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.update_big_query_export), "__call__" + type(client.transport.update_security_health_analytics_custom_module), + "__call__", ) as call: # Designate an appropriate return value for the call. - call.return_value = bigquery_export.BigQueryExport() + call.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - bigquery_export.BigQueryExport() + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.update_big_query_export( - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + response = await client.update_security_health_analytics_custom_module( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10907,8 +12627,10 @@ async def test_update_big_query_export_flattened_async(): # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].big_query_export - mock_val = bigquery_export.BigQueryExport(name="name_value") + arg = args[0].security_health_analytics_custom_module + mock_val = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ) assert arg == mock_val arg = args[0].update_mask mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) @@ -10916,7 +12638,7 @@ async def test_update_big_query_export_flattened_async(): @pytest.mark.asyncio -async def test_update_big_query_export_flattened_error_async(): +async def test_update_security_health_analytics_custom_module_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -10924,9 +12646,11 @@ async def test_update_big_query_export_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.update_big_query_export( - securitycenter_service.UpdateBigQueryExportRequest(), - big_query_export=bigquery_export.BigQueryExport(name="name_value"), + await client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) @@ -10934,11 +12658,11 @@ async def test_update_big_query_export_flattened_error_async(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListBigQueryExportsRequest, + securitycenter_service.UpdateSourceRequest, dict, ], ) -def test_list_big_query_exports(request_type, transport: str = "grpc"): +def test_update_source(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -10949,26 +12673,30 @@ def test_list_big_query_exports(request_type, transport: str = "grpc"): request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse( - next_page_token="next_page_token_value", + call.return_value = gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) - response = client.list_big_query_exports(request) + response = client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_list_big_query_exports_empty_call(): +def test_update_source_empty_call(): # This test is a coverage failsafe to make sure that totally empty calls, # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( @@ -10977,19 +12705,17 @@ def test_list_big_query_exports_empty_call(): ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - client.list_big_query_exports() + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + client.update_source() call.assert_called() _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() @pytest.mark.asyncio -async def test_list_big_query_exports_async( +async def test_update_source_async( transport: str = "grpc_asyncio", - request_type=securitycenter_service.ListBigQueryExportsRequest, + request_type=securitycenter_service.UpdateSourceRequest, ): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), @@ -11001,49 +12727,51 @@ async def test_list_big_query_exports_async( request = request_type() # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse( - next_page_token="next_page_token_value", + gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) ) - response = await client.list_big_query_exports(request) + response = await client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + assert args[0] == securitycenter_service.UpdateSourceRequest() # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) - assert response.next_page_token == "next_page_token_value" + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" @pytest.mark.asyncio -async def test_list_big_query_exports_async_from_dict(): - await test_list_big_query_exports_async(request_type=dict) +async def test_update_source_async_from_dict(): + await test_update_source_async(request_type=dict) -def test_list_big_query_exports_field_headers(): +def test_update_source_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() + request = securitycenter_service.UpdateSourceRequest() - request.parent = "parent_value" + request.source.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - call.return_value = securitycenter_service.ListBigQueryExportsResponse() - client.list_big_query_exports(request) + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + call.return_value = gcs_source.Source() + client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) == 1 @@ -11054,30 +12782,26 @@ def test_list_big_query_exports_field_headers(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "source.name=name_value", ) in kw["metadata"] @pytest.mark.asyncio -async def test_list_big_query_exports_field_headers_async(): +async def test_update_source_field_headers_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Any value that is part of the HTTP/1.1 URI should be sent as # a field header. Set these to a non-empty value. - request = securitycenter_service.ListBigQueryExportsRequest() + request = securitycenter_service.UpdateSourceRequest() - request.parent = "parent_value" + request.source.name = "name_value" # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse() - ) - await client.list_big_query_exports(request) + with mock.patch.object(type(client.transport.update_source), "__call__") as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) + await client.update_source(request) # Establish that the underlying gRPC stub method was called. assert len(call.mock_calls) @@ -11088,37 +12812,35 @@ async def test_list_big_query_exports_field_headers_async(): _, _, kw = call.mock_calls[0] assert ( "x-goog-request-params", - "parent=parent_value", + "source.name=name_value", ) in kw["metadata"] -def test_list_big_query_exports_flattened(): +def test_update_source_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() + call.return_value = gcs_source.Source() # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - client.list_big_query_exports( - parent="parent_value", + client.update_source( + source=gcs_source.Source(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) == 1 _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" + arg = args[0].source + mock_val = gcs_source.Source(name="name_value") assert arg == mock_val -def test_list_big_query_exports_flattened_error(): +def test_update_source_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -11126,45 +12848,41 @@ def test_list_big_query_exports_flattened_error(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent="parent_value", + client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name="name_value"), ) @pytest.mark.asyncio -async def test_list_big_query_exports_flattened_async(): +async def test_update_source_flattened_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" - ) as call: + with mock.patch.object(type(client.transport.update_source), "__call__") as call: # Designate an appropriate return value for the call. - call.return_value = securitycenter_service.ListBigQueryExportsResponse() + call.return_value = gcs_source.Source() - call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( - securitycenter_service.ListBigQueryExportsResponse() - ) + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(gcs_source.Source()) # Call the method with a truthy value for each flattened field, # using the keyword arguments to the method. - response = await client.list_big_query_exports( - parent="parent_value", + response = await client.update_source( + source=gcs_source.Source(name="name_value"), ) # Establish that the underlying call was made with the expected # request object values. assert len(call.mock_calls) _, args, _ = call.mock_calls[0] - arg = args[0].parent - mock_val = "parent_value" + arg = args[0].source + mock_val = gcs_source.Source(name="name_value") assert arg == mock_val @pytest.mark.asyncio -async def test_list_big_query_exports_flattened_error_async(): +async def test_update_source_flattened_error_async(): client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), ) @@ -11172,1231 +12890,2907 @@ async def test_list_big_query_exports_flattened_error_async(): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - await client.list_big_query_exports( - securitycenter_service.ListBigQueryExportsRequest(), - parent="parent_value", + await client.update_source( + securitycenter_service.UpdateSourceRequest(), + source=gcs_source.Source(name="name_value"), ) -def test_list_big_query_exports_pager(transport_name: str = "grpc"): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateSecurityMarksRequest, + dict, + ], +) +def test_update_security_marks(request_type, transport: str = "grpc"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - - metadata = () - metadata = tuple(metadata) + ( - gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks( + name="name_value", + canonical_name="canonical_name_value", ) - pager = client.list_big_query_exports(request={}) + response = client.update_security_marks(request) - assert pager._metadata == metadata + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) for i in results) + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == "name_value" + assert response.canonical_name == "canonical_name_value" -def test_list_big_query_exports_pages(transport_name: str = "grpc"): +def test_update_security_marks_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials, - transport=transport_name, + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", ) # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), "__call__" + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = list(client.list_big_query_exports(request={}).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token + client.update_security_marks() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() @pytest.mark.asyncio -async def test_list_big_query_exports_async_pager(): +async def test_update_security_marks_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.UpdateSecurityMarksRequest, +): client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport.list_big_query_exports), - "__call__", - new_callable=mock.AsyncMock, + type(client.transport.update_security_marks), "__call__" ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - async_pager = await client.list_big_query_exports( - request={}, + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks( + name="name_value", + canonical_name="canonical_name_value", + ) ) - assert async_pager.next_page_token == "abc" - responses = [] - async for response in async_pager: # pragma: no branch - responses.append(response) + response = await client.update_security_marks(request) - assert len(responses) == 6 - assert all(isinstance(i, bigquery_export.BigQueryExport) for i in responses) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateSecurityMarksRequest() + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_security_marks.SecurityMarks) + assert response.name == "name_value" + assert response.canonical_name == "canonical_name_value" -@pytest.mark.asyncio -async def test_list_big_query_exports_async_pages(): - client = SecurityCenterAsyncClient( - credentials=ga_credentials.AnonymousCredentials, - ) - # Mock the actual call within the gRPC stub, and fake the request. - with mock.patch.object( - type(client.transport.list_big_query_exports), - "__call__", - new_callable=mock.AsyncMock, - ) as call: - # Set the response to a series of pages. - call.side_effect = ( - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - next_page_token="abc", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[], - next_page_token="def", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListBigQueryExportsResponse( - big_query_exports=[ - bigquery_export.BigQueryExport(), - bigquery_export.BigQueryExport(), - ], - ), - RuntimeError, - ) - pages = [] - async for page_ in ( - await client.list_big_query_exports(request={}) - ).pages: # pragma: no branch - pages.append(page_) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token +@pytest.mark.asyncio +async def test_update_security_marks_async_from_dict(): + await test_update_security_marks_async(request_type=dict) -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.BulkMuteFindingsRequest, - dict, - ], -) -def test_bulk_mute_findings_rest(request_type): +def test_update_security_marks_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + request.security_marks.name = "name_value" - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.bulk_mute_findings(request) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + call.return_value = gcs_security_marks.SecurityMarks() + client.update_security_marks(request) - # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "security_marks.name=name_value", + ) in kw["metadata"] -def test_bulk_mute_findings_rest_required_fields( - request_type=securitycenter_service.BulkMuteFindingsRequest, -): - transport_class = transports.SecurityCenterRestTransport - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) +@pytest.mark.asyncio +async def test_update_security_marks_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), ) - # verify fields with default values are dropped + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateSecurityMarksRequest() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + request.security_marks.name = "name_value" - # verify required fields with default values are now present + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks() + ) + await client.update_security_marks(request) - jsonified_request["parent"] = "parent_value" + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).bulk_mute_findings._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "security_marks.name=name_value", + ) in kw["metadata"] - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" +def test_update_security_marks_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result - - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.bulk_mute_findings(request) - - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_bulk_mute_findings_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent",))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_bulk_mute_findings_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - operation.Operation, "_set_result_from_operation" - ), mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.BulkMuteFindingsRequest.pb( - securitycenter_service.BulkMuteFindingsRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) - - request = securitycenter_service.BulkMuteFindingsRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() - - client.bulk_mute_findings( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], + type(client.transport.update_security_marks), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) - pre.assert_called_once() - post.assert_called_once() + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name="name_value") + assert arg == mock_val -def test_bulk_mute_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.BulkMuteFindingsRequest -): +def test_update_security_marks_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.bulk_mute_findings(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), + ) -def test_bulk_mute_findings_rest_flattened(): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_update_security_marks_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") - - # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_security_marks), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = gcs_security_marks.SecurityMarks() - # get truthy value for each flattened field - mock_args = dict( - parent="parent_value", + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + gcs_security_marks.SecurityMarks() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_security_marks( + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.bulk_mute_findings(**mock_args) # Establish that the underlying call was made with the expected # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, - args[1], - ) + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].security_marks + mock_val = gcs_security_marks.SecurityMarks(name="name_value") + assert arg == mock_val -def test_bulk_mute_findings_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_update_security_marks_flattened_error_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.bulk_mute_findings( - securitycenter_service.BulkMuteFindingsRequest(), - parent="parent_value", + await client.update_security_marks( + securitycenter_service.UpdateSecurityMarksRequest(), + security_marks=gcs_security_marks.SecurityMarks(name="name_value"), ) -def test_bulk_mute_findings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateSourceRequest, + securitycenter_service.CreateBigQueryExportRequest, dict, ], ) -def test_create_source_rest(request_type): +def test_create_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["source"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "canonical_name": "canonical_name_value", - } - request = request_type(**request_init) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source( + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( name="name_value", - display_name="display_name_value", description="description_value", - canonical_name="canonical_name_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", ) + response = client.create_big_query_export(request) - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.create_source(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_source.Source) + assert isinstance(response, bigquery_export.BigQueryExport) assert response.name == "name_value" - assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" -def test_create_source_rest_required_fields( - request_type=securitycenter_service.CreateSourceRequest, -): - transport_class = transports.SecurityCenterRestTransport +def test_create_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) - request_init = {} - request_init["parent"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + client.create_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_create_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.CreateBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - # verify fields with default values are dropped + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + ) + response = await client.create_big_query_export(request) - # verify required fields with default values are now present + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.CreateBigQueryExportRequest() - jsonified_request["parent"] = "parent_value" + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_source._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" +@pytest.mark.asyncio +async def test_create_big_query_export_async_from_dict(): + await test_create_big_query_export_async(request_type=dict) + +def test_create_big_query_export_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - request = request_type(**request_init) - - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result - response_value = Response() - response_value.status_code = 200 + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + request.parent = "parent_value" - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + call.return_value = bigquery_export.BigQueryExport() + client.create_big_query_export(request) - response = client.create_source(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] -def test_create_source_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials +@pytest.mark.asyncio +async def test_create_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), ) - unset_fields = transport.create_source._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(()) - & set( - ( - "parent", - "source", - ) + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.CreateBigQueryExportRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() ) - ) + await client.create_big_query_export(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_source_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_create_big_query_export_flattened(): + client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), ) - client = SecurityCenterClient(transport=transport) + + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_source" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_source" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateSourceRequest.pb( - securitycenter_service.CreateSourceRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) - - request = securitycenter_service.CreateSourceRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_source.Source() - - client.create_source( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.create_big_query_export( + parent="parent_value", + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) - pre.assert_called_once() - post.assert_called_once() + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = "big_query_export_id_value" + assert arg == mock_val -def test_create_source_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateSourceRequest -): +def test_create_big_query_export_flattened_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["source"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "canonical_name": "canonical_name_value", - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.create_source(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), + parent="parent_value", + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", + ) -def test_create_source_rest_flattened(): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_source.Source() - - # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.create_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() - # get truthy value for each flattened field - mock_args = dict( + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.create_big_query_export( parent="parent_value", - source=gcs_source.Source(name="name_value"), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_source.Source.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.create_source(**mock_args) # Establish that the underlying call was made with the expected # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] - ) + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].big_query_export_id + mock_val = "big_query_export_id_value" + assert arg == mock_val -def test_create_source_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.asyncio +async def test_create_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, ) # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_source( - securitycenter_service.CreateSourceRequest(), + await client.create_big_query_export( + securitycenter_service.CreateBigQueryExportRequest(), parent="parent_value", - source=gcs_source.Source(name="name_value"), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + big_query_export_id="big_query_export_id_value", ) -def test_create_source_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) - - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateFindingRequest, + securitycenter_service.DeleteBigQueryExportRequest, dict, ], ) -def test_create_finding_rest(request_type): +def test_delete_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} - request_init["finding"] = { - "name": "name_value", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { - "base_score": 0.1046, - "attack_vector": 1, - "attack_complexity": 1, - "privileges_required": 1, - "user_interaction": 1, - "scope": 1, - "confidentiality_impact": 1, - "integrity_impact": 1, - "availability_impact": 1, - }, - "upstream_fix_available": True, - } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } - ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, - } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], - } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } - ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], - } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } - ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", - ) + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + response = client.delete_big_query_export(request) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - response = client.create_finding(request) + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert response is None -def test_create_finding_rest_required_fields( - request_type=securitycenter_service.CreateFindingRequest, -): - transport_class = transports.SecurityCenterRestTransport +def test_delete_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) - request_init = {} - request_init["parent"] = "" - request_init["finding_id"] = "" - request = request_type(**request_init) - pb_request = request_type.pb(request) - jsonified_request = json.loads( - json_format.MessageToJson( - pb_request, - including_default_value_fields=False, - use_integers_for_enums=False, - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + client.delete_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_delete_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.DeleteBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - # verify fields with default values are dropped - assert "findingId" not in jsonified_request + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_finding._get_unset_required_fields(jsonified_request) - jsonified_request.update(unset_fields) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + response = await client.delete_big_query_export(request) - # verify required fields with default values are now present - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == request_init["finding_id"] + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.DeleteBigQueryExportRequest() - jsonified_request["parent"] = "parent_value" - jsonified_request["findingId"] = "finding_id_value" + # Establish that the response is the type that we expect. + assert response is None - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_finding._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("finding_id",)) - jsonified_request.update(unset_fields) - # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "findingId" in jsonified_request - assert jsonified_request["findingId"] == "finding_id_value" +@pytest.mark.asyncio +async def test_delete_big_query_export_async_from_dict(): + await test_delete_big_query_export_async(request_type=dict) + +def test_delete_big_query_export_field_headers(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", ) - request = request_type(**request_init) - # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # We need to mock transcode() because providing default values - # for required fields will fail the real version if the http_options - # expect actual values for those fields. - with mock.patch.object(path_template, "transcode") as transcode: - # A uri without fields and an empty body will force all the - # request fields to show up in the query_params. - pb_request = request_type.pb(request) - transcode_result = { - "uri": "v1/sample_method", - "method": "post", - "query_params": pb_request, - } - transcode_result["body"] = pb_request - transcode.return_value = transcode_result + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() - response_value = Response() - response_value.status_code = 200 + request.name = "name_value" - pb_return_value = gcs_finding.Finding.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + call.return_value = None + client.delete_big_query_export(request) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request - response = client.create_finding(request) + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] - expected_params = [ - ( - "findingId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params +@pytest.mark.asyncio +async def test_delete_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.DeleteBigQueryExportRequest() + + request.name = "name_value" -def test_create_finding_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + await client.delete_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "name=name_value", + ) in kw["metadata"] + + +def test_delete_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), ) - unset_fields = transport.create_finding._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("findingId",)) - & set( - ( - "parent", - "findingId", - "finding", - ) + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.delete_big_query_export( + name="name_value", ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val + + +def test_delete_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), ) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name="name_value", + ) + -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_finding_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), ) - client = SecurityCenterClient(transport=transport) + + # Mock the actual call within the gRPC stub, and fake the request. with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_finding" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_finding" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.CreateFindingRequest.pb( - securitycenter_service.CreateFindingRequest() + type(client.transport.delete_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = None + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall(None) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.delete_big_query_export( + name="name_value", ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].name + mock_val = "name_value" + assert arg == mock_val - request = securitycenter_service.CreateFindingRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - client.create_finding( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) +@pytest.mark.asyncio +async def test_delete_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) - pre.assert_called_once() - post.assert_called_once() + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.delete_big_query_export( + securitycenter_service.DeleteBigQueryExportRequest(), + name="name_value", + ) -def test_create_finding_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateFindingRequest -): +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateBigQueryExportRequest, + dict, + ], +) +def test_update_big_query_export(request_type, transport: str = "grpc"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} - request_init["finding"] = { - "name": "name_value", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + response = client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +def test_update_big_query_export_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + client.update_big_query_export() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + +@pytest.mark.asyncio +async def test_update_big_query_export_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.UpdateBigQueryExportRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + ) + response = await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.UpdateBigQueryExportRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +@pytest.mark.asyncio +async def test_update_big_query_export_async_from_dict(): + await test_update_big_query_export_async(request_type=dict) + + +def test_update_big_query_export_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + call.return_value = bigquery_export.BigQueryExport() + client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "big_query_export.name=name_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_update_big_query_export_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.UpdateBigQueryExportRequest() + + request.big_query_export.name = "name_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + await client.update_big_query_export(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "big_query_export.name=name_value", + ) in kw["metadata"] + + +def test_update_big_query_export_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +def test_update_big_query_export_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.update_big_query_export), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = bigquery_export.BigQueryExport() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + bigquery_export.BigQueryExport() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.update_big_query_export( + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].big_query_export + mock_val = bigquery_export.BigQueryExport(name="name_value") + assert arg == mock_val + arg = args[0].update_mask + mock_val = field_mask_pb2.FieldMask(paths=["paths_value"]) + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_update_big_query_export_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.update_big_query_export( + securitycenter_service.UpdateBigQueryExportRequest(), + big_query_export=bigquery_export.BigQueryExport(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.ListBigQueryExportsRequest, + dict, + ], +) +def test_list_big_query_exports(request_type, transport: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse( + next_page_token="next_page_token_value", + ) + response = client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsPager) + assert response.next_page_token == "next_page_token_value" + + +def test_list_big_query_exports_empty_call(): + # This test is a coverage failsafe to make sure that totally empty calls, + # i.e. request == None and no flattened fields passed, work. + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="grpc", + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + client.list_big_query_exports() + call.assert_called() + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async( + transport: str = "grpc_asyncio", + request_type=securitycenter_service.ListBigQueryExportsRequest, +): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Everything is optional in proto3 as far as the runtime is concerned, + # and we are mocking out the actual API, so just send an empty request. + request = request_type() + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse( + next_page_token="next_page_token_value", + ) + ) + response = await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == securitycenter_service.ListBigQueryExportsRequest() + + # Establish that the response is the type that we expect. + assert isinstance(response, pagers.ListBigQueryExportsAsyncPager) + assert response.next_page_token == "next_page_token_value" + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_from_dict(): + await test_list_big_query_exports_async(request_type=dict) + + +def test_list_big_query_exports_field_headers(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +@pytest.mark.asyncio +async def test_list_big_query_exports_field_headers_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Any value that is part of the HTTP/1.1 URI should be sent as + # a field header. Set these to a non-empty value. + request = securitycenter_service.ListBigQueryExportsRequest() + + request.parent = "parent_value" + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse() + ) + await client.list_big_query_exports(request) + + # Establish that the underlying gRPC stub method was called. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + assert args[0] == request + + # Establish that the field header was sent. + _, _, kw = call.mock_calls[0] + assert ( + "x-goog-request-params", + "parent=parent_value", + ) in kw["metadata"] + + +def test_list_big_query_exports_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + client.list_big_query_exports( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) == 1 + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +def test_list_big_query_exports_flattened_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent="parent_value", + ) + + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Designate an appropriate return value for the call. + call.return_value = securitycenter_service.ListBigQueryExportsResponse() + + call.return_value = grpc_helpers_async.FakeUnaryUnaryCall( + securitycenter_service.ListBigQueryExportsResponse() + ) + # Call the method with a truthy value for each flattened field, + # using the keyword arguments to the method. + response = await client.list_big_query_exports( + parent="parent_value", + ) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(call.mock_calls) + _, args, _ = call.mock_calls[0] + arg = args[0].parent + mock_val = "parent_value" + assert arg == mock_val + + +@pytest.mark.asyncio +async def test_list_big_query_exports_flattened_error_async(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + await client.list_big_query_exports( + securitycenter_service.ListBigQueryExportsRequest(), + parent="parent_value", + ) + + +def test_list_big_query_exports_pager(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + + metadata = () + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("parent", ""),)), + ) + pager = client.list_big_query_exports(request={}) + + assert pager._metadata == metadata + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) for i in results) + + +def test_list_big_query_exports_pages(transport_name: str = "grpc"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials, + transport=transport_name, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), "__call__" + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = list(client.list_big_query_exports(request={}).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pager(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + async_pager = await client.list_big_query_exports( + request={}, + ) + assert async_pager.next_page_token == "abc" + responses = [] + async for response in async_pager: # pragma: no branch + responses.append(response) + + assert len(responses) == 6 + assert all(isinstance(i, bigquery_export.BigQueryExport) for i in responses) + + +@pytest.mark.asyncio +async def test_list_big_query_exports_async_pages(): + client = SecurityCenterAsyncClient( + credentials=ga_credentials.AnonymousCredentials, + ) + + # Mock the actual call within the gRPC stub, and fake the request. + with mock.patch.object( + type(client.transport.list_big_query_exports), + "__call__", + new_callable=mock.AsyncMock, + ) as call: + # Set the response to a series of pages. + call.side_effect = ( + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + next_page_token="abc", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[], + next_page_token="def", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListBigQueryExportsResponse( + big_query_exports=[ + bigquery_export.BigQueryExport(), + bigquery_export.BigQueryExport(), + ], + ), + RuntimeError, + ) + pages = [] + async for page_ in ( + await client.list_big_query_exports(request={}) + ).pages: # pragma: no branch + pages.append(page_) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.BulkMuteFindingsRequest, + dict, + ], +) +def test_bulk_mute_findings_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.bulk_mute_findings(request) + + # Establish that the response is the type that we expect. + assert response.operation.name == "operations/spam" + + +def test_bulk_mute_findings_rest_required_fields( + request_type=securitycenter_service.BulkMuteFindingsRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).bulk_mute_findings._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.bulk_mute_findings(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_bulk_mute_findings_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.bulk_mute_findings._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_bulk_mute_findings_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + operation.Operation, "_set_result_from_operation" + ), mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_bulk_mute_findings" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_bulk_mute_findings" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.BulkMuteFindingsRequest.pb( + securitycenter_service.BulkMuteFindingsRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() + ) + + request = securitycenter_service.BulkMuteFindingsRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = operations_pb2.Operation() + + client.bulk_mute_findings( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_bulk_mute_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.BulkMuteFindingsRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.bulk_mute_findings(request) + + +def test_bulk_mute_findings_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = operations_pb2.Operation(name="operations/spam") + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = json_format.MessageToJson(return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.bulk_mute_findings(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/findings:bulkMute" % client.transport._host, + args[1], + ) + + +def test_bulk_mute_findings_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.bulk_mute_findings( + securitycenter_service.BulkMuteFindingsRequest(), + parent="parent_value", + ) + + +def test_bulk_mute_findings_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_create_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} + request_init["security_health_analytics_custom_module"] = { + "name": "name_value", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value", + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" + + +def test_create_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_security_health_analytics_custom_module(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "securityHealthAnalyticsCustomModule", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "post_create_security_health_analytics_custom_module", + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_create_security_health_analytics_custom_module", + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + request = ( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest() + ) + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + client.create_security_health_analytics_custom_module( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_security_health_analytics_custom_module_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} + request_init["security_health_analytics_custom_module"] = { + "name": "name_value", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_security_health_analytics_custom_module(request) + + +def test_create_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) + + # get arguments that satisfy an http rule for this method + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" + % client.transport._host, + args[1], + ) + + +def test_create_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_security_health_analytics_custom_module( + securitycenter_service.CreateSecurityHealthAnalyticsCustomModuleRequest(), + parent="parent_value", + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( + name="name_value" + ), + ) + + +def test_create_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateSourceRequest, + dict, + ], +) +def test_create_source_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["source"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "canonical_name": "canonical_name_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_source(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" + + +def test_create_source_rest_required_fields( + request_type=securitycenter_service.CreateSourceRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["parent"] = "parent_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_source._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_source(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_source_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_source._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "source", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_source_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_source" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_source" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateSourceRequest.pb( + securitycenter_service.CreateSourceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_source.Source.to_json(gcs_source.Source()) + + request = securitycenter_service.CreateSourceRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_source.Source() + + client.create_source( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_source_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateSourceRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["source"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "canonical_name": "canonical_name_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_source(request) + + +def test_create_source_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_source.Source() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + source=gcs_source.Source(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_source.Source.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_source(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] + ) + + +def test_create_source_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_source( + securitycenter_service.CreateSourceRequest(), + parent="parent_value", + source=gcs_source.Source(name="name_value"), + ) + + +def test_create_source_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateFindingRequest, + dict, + ], +) +def test_create_finding_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init["finding"] = { + "name": "name_value", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { + "base_score": 0.1046, + "attack_vector": 1, + "attack_complexity": 1, + "privileges_required": 1, + "user_interaction": 1, + "scope": 1, + "confidentiality_impact": 1, + "integrity_impact": 1, + "availability_impact": 1, + }, + "upstream_fix_available": True, + } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding( + name="name_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_finding(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_finding.Finding) + assert response.name == "name_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" + + +def test_create_finding_rest_required_fields( + request_type=securitycenter_service.CreateFindingRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["finding_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "findingId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_finding._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == request_init["finding_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["findingId"] = "finding_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_finding._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("finding_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "findingId" in jsonified_request + assert jsonified_request["findingId"] == "finding_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_finding(request) + + expected_params = [ + ( + "findingId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_finding._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("findingId",)) + & set( + ( + "parent", + "findingId", + "finding", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_finding" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_finding" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateFindingRequest.pb( + securitycenter_service.CreateFindingRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + + request = securitycenter_service.CreateFindingRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() + + client.create_finding( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_finding_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateFindingRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init["finding"] = { + "name": "name_value", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { "base_score": 0.1046, "attack_vector": 1, "attack_complexity": 1, @@ -12409,140 +15803,2118 @@ def test_create_finding_rest_bad_request( }, "upstream_fix_available": True, } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_finding(request) + + +def test_create_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1/sources/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + finding_id="finding_id_value", + finding=gcs_finding.Finding(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/sources/*}/findings" + % client.transport._host, + args[1], + ) + + +def test_create_finding_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_finding( + securitycenter_service.CreateFindingRequest(), + parent="parent_value", + finding_id="finding_id_value", + finding=gcs_finding.Finding(name="name_value"), + ) + + +def test_create_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateMuteConfigRequest, + dict, + ], +) +def test_create_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["mute_config"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig( + name="name_value", + display_name="display_name_value", + description="description_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_mute_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" + + +def test_create_mute_config_rest_required_fields( + request_type=securitycenter_service.CreateMuteConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["mute_config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "muteConfigId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["muteConfigId"] = "mute_config_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_mute_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("mute_config_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "muteConfigId" in jsonified_request + assert jsonified_request["muteConfigId"] == "mute_config_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_mute_config(request) + + expected_params = [ + ( + "muteConfigId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("muteConfigId",)) + & set( + ( + "parent", + "muteConfig", + "muteConfigId", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_mute_config" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_mute_config" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateMuteConfigRequest.pb( + securitycenter_service.CreateMuteConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_mute_config.MuteConfig.to_json( + gcs_mute_config.MuteConfig() + ) + + request = securitycenter_service.CreateMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.create_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.CreateMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["mute_config"] = { + "name": "name_value", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_mute_config(request) + + +def test_create_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_mute_config.MuteConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + mute_config_id="mute_config_id_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + args[1], + ) + + +def test_create_mute_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_mute_config( + securitycenter_service.CreateMuteConfigRequest(), + parent="parent_value", + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + mute_config_id="mute_config_id_value", + ) + + +def test_create_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.CreateNotificationConfigRequest, + dict, + ], +) +def test_create_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["notification_config"] = { + "name": "name_value", + "description": "description_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig( + name="name_value", + description="description_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.create_notification_config(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, gcs_notification_config.NotificationConfig) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" + + +def test_create_notification_config_rest_required_fields( + request_type=securitycenter_service.CreateNotificationConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["parent"] = "" + request_init["config_id"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + assert "configId" not in jsonified_request + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + assert "configId" in jsonified_request + assert jsonified_request["configId"] == request_init["config_id"] + + jsonified_request["parent"] = "parent_value" + jsonified_request["configId"] = "config_id_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).create_notification_config._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("config_id",)) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "configId" in jsonified_request + assert jsonified_request["configId"] == "config_id_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = gcs_notification_config.NotificationConfig.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.create_notification_config(request) + + expected_params = [ + ( + "configId", + "", + ), + ("$alt", "json;enum-encoding=int"), + ] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_create_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.create_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("configId",)) + & set( + ( + "parent", + "configId", + "notificationConfig", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_create_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_create_notification_config" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_create_notification_config" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.CreateNotificationConfigRequest.pb( + securitycenter_service.CreateNotificationConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json( + gcs_notification_config.NotificationConfig() + ) + + request = securitycenter_service.CreateNotificationConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_notification_config.NotificationConfig() + + client.create_notification_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_create_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.CreateNotificationConfigRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request_init["notification_config"] = { + "name": "name_value", + "description": "description_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.create_notification_config(request) + + +def test_create_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_notification_config.NotificationConfig() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + config_id="config_id_value", + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.create_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/notificationConfigs" + % client.transport._host, + args[1], + ) + + +def test_create_notification_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.create_notification_config( + securitycenter_service.CreateNotificationConfigRequest(), + parent="parent_value", + config_id="config_id_value", + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), + ) + + +def test_create_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteMuteConfigRequest, + dict, + ], +) +def test_delete_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_mute_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_mute_config_rest_required_fields( + request_type=securitycenter_service.DeleteMuteConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_mute_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_mute_config(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_mute_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_mute_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_delete_mute_config" + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteMuteConfigRequest.pb( + securitycenter_service.DeleteMuteConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + + +def test_delete_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.DeleteMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_mute_config(request) + + +def test_delete_mute_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_mute_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, + args[1], + ) + + +def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_mute_config( + securitycenter_service.DeleteMuteConfigRequest(), + name="name_value", + ) + + +def test_delete_mute_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteNotificationConfigRequest, + dict, + ], +) +def test_delete_notification_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_notification_config(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_notification_config_rest_required_fields( + request_type=securitycenter_service.DeleteNotificationConfigRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_notification_config._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_notification_config(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_notification_config_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_notification_config_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_delete_notification_config" + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb( + securitycenter_service.DeleteNotificationConfigRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = securitycenter_service.DeleteNotificationConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_notification_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, + ) + + pre.assert_called_once() + + +def test_delete_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.DeleteNotificationConfigRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_notification_config(request) + + +def test_delete_notification_config_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_notification_config(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/notificationConfigs/*}" + % client.transport._host, + args[1], + ) + + +def test_delete_notification_config_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_notification_config( + securitycenter_service.DeleteNotificationConfigRequest(), + name="name_value", + ) + + +def test_delete_notification_config_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, + dict, + ], +) +def test_delete_security_health_analytics_custom_module_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.delete_security_health_analytics_custom_module(request) + + # Establish that the response is the type that we expect. + assert response is None + + +def test_delete_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).delete_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = None + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.delete_security_health_analytics_custom_module(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_delete_security_health_analytics_custom_module_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_delete_security_health_analytics_custom_module", + ) as pre: + pre.assert_not_called() + pb_message = securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + + request = ( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest() + ) + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + + client.delete_security_health_analytics_custom_module( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + + +def test_delete_security_health_analytics_custom_module_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.delete_security_health_analytics_custom_module(request) + + +def test_delete_security_health_analytics_custom_module_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = None + + # get arguments that satisfy an http rule for this method + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + json_return_value = "" + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.delete_security_health_analytics_custom_module(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" + % client.transport._host, + args[1], + ) + + +def test_delete_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.delete_security_health_analytics_custom_module( + securitycenter_service.DeleteSecurityHealthAnalyticsCustomModuleRequest(), + name="name_value", + ) + + +def test_delete_security_health_analytics_custom_module_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.GetBigQueryExportRequest, + dict, + ], +) +def test_get_big_query_export_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport( + name="name_value", + description="description_value", + filter="filter_value", + dataset="dataset_value", + most_recent_editor="most_recent_editor_value", + principal="principal_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_big_query_export(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, bigquery_export.BigQueryExport) + assert response.name == "name_value" + assert response.description == "description_value" + assert response.filter == "filter_value" + assert response.dataset == "dataset_value" + assert response.most_recent_editor == "most_recent_editor_value" + assert response.principal == "principal_value" + + +def test_get_big_query_export_rest_required_fields( + request_type=securitycenter_service.GetBigQueryExportRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["name"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["name"] = "name_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_big_query_export._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_big_query_export(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_big_query_export_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_big_query_export._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_big_query_export_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_get_big_query_export" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_big_query_export" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.GetBigQueryExportRequest.pb( + securitycenter_service.GetBigQueryExportRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = bigquery_export.BigQueryExport.to_json( + bigquery_export.BigQueryExport() + ) + + request = securitycenter_service.GetBigQueryExportRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = bigquery_export.BigQueryExport() + + client.get_big_query_export( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_big_query_export_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.GetBigQueryExportRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.get_big_query_export(request) + + +def test_get_big_query_export_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = bigquery_export.BigQueryExport() + + # get arguments that satisfy an http rule for this method + sample_request = {"name": "organizations/sample1/bigQueryExports/sample2"} + + # get truthy value for each flattened field + mock_args = dict( + name="name_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.get_big_query_export(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, + args[1], + ) + + +def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.get_big_query_export( + securitycenter_service.GetBigQueryExportRequest(), + name="name_value", + ) + + +def test_get_big_query_export_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + iam_policy_pb2.GetIamPolicyRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "organizations/sample1/sources/sample2"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.get_iam_policy(request) + + # Establish that the response is the type that we expect. + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" + + +def test_get_iam_policy_rest_required_fields( + request_type=iam_policy_pb2.GetIamPolicyRequest, +): + transport_class = transports.SecurityCenterRestTransport + + request_init = {} + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with default values are now present + + jsonified_request["resource"] = "resource_value" + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_iam_policy._get_unset_required_fields(jsonified_request) + jsonified_request.update(unset_fields) + + # verify required fields with non-default values are left alone + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" + + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + return_value = policy_pb2.Policy() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = return_value + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.get_iam_policy(request) + + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_get_iam_policy_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get_iam_policy._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("resource",))) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_iam_policy_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), + ) + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_get_iam_policy" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = iam_policy_pb2.GetIamPolicyRequest() + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + + request = iam_policy_pb2.GetIamPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = policy_pb2.Policy() + + client.get_iam_policy( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, - } + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_get_iam_policy_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.GetIamPolicyRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12554,10 +17926,10 @@ def test_create_finding_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_finding(request) + client.get_iam_policy(request) -def test_create_finding_rest_flattened(): +def test_get_iam_policy_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12566,41 +17938,39 @@ def test_create_finding_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = policy_pb2.Policy() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"resource": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - finding_id="finding_id_value", - finding=gcs_finding.Finding(name="name_value"), + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_finding(**mock_args) + client.get_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*/sources/*}/findings" + "%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" % client.transport._host, args[1], ) -def test_create_finding_rest_flattened_error(transport: str = "rest"): +def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12609,15 +17979,13 @@ def test_create_finding_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_finding( - securitycenter_service.CreateFindingRequest(), - parent="parent_value", - finding_id="finding_id_value", - finding=gcs_finding.Finding(name="name_value"), + client.get_iam_policy( + iam_policy_pb2.GetIamPolicyRequest(), + resource="resource_value", ) -def test_create_finding_rest_error(): +def test_get_iam_policy_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12626,33 +17994,24 @@ def test_create_finding_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateMuteConfigRequest, + securitycenter_service.GetMuteConfigRequest, dict, ], ) -def test_create_mute_config_rest(request_type): +def test_get_mute_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["mute_config"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", - } + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( + return_value = mute_config.MuteConfig( name="name_value", display_name="display_name_value", description="description_value", @@ -12663,15 +18022,15 @@ def test_create_mute_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_mute_config(request) + response = client.get_mute_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) + assert isinstance(response, mute_config.MuteConfig) assert response.name == "name_value" assert response.display_name == "display_name_value" assert response.description == "description_value" @@ -12679,14 +18038,13 @@ def test_create_mute_config_rest(request_type): assert response.most_recent_editor == "most_recent_editor_value" -def test_create_mute_config_rest_required_fields( - request_type=securitycenter_service.CreateMuteConfigRequest, +def test_get_mute_config_rest_required_fields( + request_type=securitycenter_service.GetMuteConfigRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" - request_init["mute_config_id"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -12698,32 +18056,24 @@ def test_create_mute_config_rest_required_fields( ) # verify fields with default values are dropped - assert "muteConfigId" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_mute_config._get_unset_required_fields(jsonified_request) + ).get_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == request_init["mute_config_id"] - jsonified_request["parent"] = "parent_value" - jsonified_request["muteConfigId"] = "mute_config_id_value" + jsonified_request["name"] = "name_value" - unset_fields = transport_class( - credentials=ga_credentials.AnonymousCredentials() - ).create_mute_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("mute_config_id",)) + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).get_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "muteConfigId" in jsonified_request - assert jsonified_request["muteConfigId"] == "mute_config_id_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12732,7 +18082,7 @@ def test_create_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = mute_config.MuteConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -12744,54 +18094,38 @@ def test_create_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_mute_config(request) + response = client.get_mute_config(request) - expected_params = [ - ( - "muteConfigId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] + expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_mute_config_rest_unset_required_fields(): +def test_get_mute_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("muteConfigId",)) - & set( - ( - "parent", - "muteConfig", - "muteConfigId", - ) - ) - ) + unset_fields = transport.get_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_mute_config_rest_interceptors(null_interceptor): +def test_get_mute_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -12804,14 +18138,14 @@ def test_create_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_mute_config" + transports.SecurityCenterRestInterceptor, "post_get_mute_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_mute_config" + transports.SecurityCenterRestInterceptor, "pre_get_mute_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.CreateMuteConfigRequest.pb( - securitycenter_service.CreateMuteConfigRequest() + pb_message = securitycenter_service.GetMuteConfigRequest.pb( + securitycenter_service.GetMuteConfigRequest() ) transcode.return_value = { "method": "post", @@ -12823,19 +18157,19 @@ def test_create_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json( - gcs_mute_config.MuteConfig() + req.return_value._content = mute_config.MuteConfig.to_json( + mute_config.MuteConfig() ) - request = securitycenter_service.CreateMuteConfigRequest() + request = securitycenter_service.GetMuteConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() + post.return_value = mute_config.MuteConfig() - client.create_mute_config( + client.get_mute_config( request, metadata=[ ("key", "val"), @@ -12847,8 +18181,8 @@ def test_create_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.CreateMuteConfigRequest +def test_get_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GetMuteConfigRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -12856,16 +18190,7 @@ def test_create_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["mute_config"] = { - "name": "name_value", - "display_name": "display_name_value", - "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", - } + request_init = {"name": "organizations/sample1/muteConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -12877,10 +18202,10 @@ def test_create_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_mute_config(request) + client.get_mute_config(request) -def test_create_mute_config_rest_flattened(): +def test_get_mute_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -12889,40 +18214,38 @@ def test_create_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = mute_config.MuteConfig() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - mute_config_id="mute_config_id_value", + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_mute_config(**mock_args) + client.get_mute_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, args[1], ) -def test_create_mute_config_rest_flattened_error(transport: str = "rest"): +def test_get_mute_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -12931,15 +18254,13 @@ def test_create_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_mute_config( - securitycenter_service.CreateMuteConfigRequest(), - parent="parent_value", - mute_config=gcs_mute_config.MuteConfig(name="name_value"), - mute_config_id="mute_config_id_value", + client.get_mute_config( + securitycenter_service.GetMuteConfigRequest(), + name="name_value", ) -def test_create_mute_config_rest_error(): +def test_get_mute_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -12948,36 +18269,29 @@ def test_create_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.CreateNotificationConfigRequest, + securitycenter_service.GetNotificationConfigRequest, dict, ], ) -def test_create_notification_config_rest(request_type): +def test_get_notification_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["notification_config"] = { - "name": "name_value", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, - } + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( + return_value = notification_config.NotificationConfig( name="name_value", description="description_value", pubsub_topic="pubsub_topic_value", service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + streaming_config=notification_config.NotificationConfig.StreamingConfig( filter="filter_value" ), ) @@ -12985,29 +18299,28 @@ def test_create_notification_config_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_notification_config(request) + response = client.get_notification_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) + assert isinstance(response, notification_config.NotificationConfig) assert response.name == "name_value" assert response.description == "description_value" assert response.pubsub_topic == "pubsub_topic_value" assert response.service_account == "service_account_value" -def test_create_notification_config_rest_required_fields( - request_type=securitycenter_service.CreateNotificationConfigRequest, +def test_get_notification_config_rest_required_fields( + request_type=securitycenter_service.GetNotificationConfigRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" - request_init["config_id"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -13019,32 +18332,24 @@ def test_create_notification_config_rest_required_fields( ) # verify fields with default values are dropped - assert "configId" not in jsonified_request unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_notification_config._get_unset_required_fields(jsonified_request) + ).get_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - assert "configId" in jsonified_request - assert jsonified_request["configId"] == request_init["config_id"] - jsonified_request["parent"] = "parent_value" - jsonified_request["configId"] = "config_id_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).create_notification_config._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set(("config_id",)) + ).get_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" - assert "configId" in jsonified_request - assert jsonified_request["configId"] == "config_id_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13053,7 +18358,7 @@ def test_create_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = notification_config.NotificationConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13065,56 +18370,38 @@ def test_create_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb( - return_value - ) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.create_notification_config(request) + response = client.get_notification_config(request) - expected_params = [ - ( - "configId", - "", - ), - ("$alt", "json;enum-encoding=int"), - ] + expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_create_notification_config_rest_unset_required_fields(): +def test_get_notification_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.create_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(("configId",)) - & set( - ( - "parent", - "configId", - "notificationConfig", - ) - ) - ) + unset_fields = transport.get_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_create_notification_config_rest_interceptors(null_interceptor): +def test_get_notification_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13127,14 +18414,14 @@ def test_create_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_create_notification_config" + transports.SecurityCenterRestInterceptor, "post_get_notification_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_create_notification_config" + transports.SecurityCenterRestInterceptor, "pre_get_notification_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.CreateNotificationConfigRequest.pb( - securitycenter_service.CreateNotificationConfigRequest() + pb_message = securitycenter_service.GetNotificationConfigRequest.pb( + securitycenter_service.GetNotificationConfigRequest() ) transcode.return_value = { "method": "post", @@ -13146,19 +18433,19 @@ def test_create_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json( - gcs_notification_config.NotificationConfig() + req.return_value._content = notification_config.NotificationConfig.to_json( + notification_config.NotificationConfig() ) - request = securitycenter_service.CreateNotificationConfigRequest() + request = securitycenter_service.GetNotificationConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() + post.return_value = notification_config.NotificationConfig() - client.create_notification_config( + client.get_notification_config( request, metadata=[ ("key", "val"), @@ -13170,9 +18457,9 @@ def test_create_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_create_notification_config_rest_bad_request( +def test_get_notification_config_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.CreateNotificationConfigRequest, + request_type=securitycenter_service.GetNotificationConfigRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13180,14 +18467,7 @@ def test_create_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request_init["notification_config"] = { - "name": "name_value", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, - } + request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13199,10 +18479,10 @@ def test_create_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.create_notification_config(request) + client.get_notification_config(request) -def test_create_notification_config_rest_flattened(): +def test_get_notification_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13211,43 +18491,39 @@ def test_create_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = notification_config.NotificationConfig() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} # get truthy value for each flattened field mock_args = dict( - parent="parent_value", - config_id="config_id_value", - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.create_notification_config(**mock_args) + client.get_notification_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/notificationConfigs" + "%s/v1/{name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1], ) -def test_create_notification_config_rest_flattened_error(transport: str = "rest"): +def test_get_notification_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13256,17 +18532,13 @@ def test_create_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.create_notification_config( - securitycenter_service.CreateNotificationConfigRequest(), - parent="parent_value", - config_id="config_id_value", - notification_config=gcs_notification_config.NotificationConfig( - name="name_value" - ), + client.get_notification_config( + securitycenter_service.GetNotificationConfigRequest(), + name="name_value", ) -def test_create_notification_config_rest_error(): +def test_get_notification_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13275,40 +18547,46 @@ def test_create_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteMuteConfigRequest, + securitycenter_service.GetOrganizationSettingsRequest, dict, ], ) -def test_delete_mute_config_rest(request_type): +def test_get_organization_settings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"name": "organizations/sample1/organizationSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings( + name="name_value", + enable_asset_discovery=True, + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_mute_config(request) + response = client.get_organization_settings(request) # Establish that the response is the type that we expect. - assert response is None + assert isinstance(response, organization_settings.OrganizationSettings) + assert response.name == "name_value" + assert response.enable_asset_discovery is True -def test_delete_mute_config_rest_required_fields( - request_type=securitycenter_service.DeleteMuteConfigRequest, +def test_get_organization_settings_rest_required_fields( + request_type=securitycenter_service.GetOrganizationSettingsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13328,7 +18606,7 @@ def test_delete_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_mute_config._get_unset_required_fields(jsonified_request) + ).get_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13337,7 +18615,7 @@ def test_delete_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_mute_config._get_unset_required_fields(jsonified_request) + ).get_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13351,7 +18629,7 @@ def test_delete_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13363,36 +18641,40 @@ def test_delete_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": pb_request, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = "" + + pb_return_value = organization_settings.OrganizationSettings.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_mute_config(request) + response = client.get_organization_settings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_mute_config_rest_unset_required_fields(): +def test_get_organization_settings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_mute_config._get_unset_required_fields({}) + unset_fields = transport.get_organization_settings._get_unset_required_fields({}) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_mute_config_rest_interceptors(null_interceptor): +def test_get_organization_settings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13405,11 +18687,14 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_delete_mute_config" + transports.SecurityCenterRestInterceptor, "post_get_organization_settings" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_get_organization_settings" ) as pre: pre.assert_not_called() - pb_message = securitycenter_service.DeleteMuteConfigRequest.pb( - securitycenter_service.DeleteMuteConfigRequest() + post.assert_not_called() + pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb( + securitycenter_service.GetOrganizationSettingsRequest() ) transcode.return_value = { "method": "post", @@ -13421,15 +18706,19 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() + req.return_value._content = organization_settings.OrganizationSettings.to_json( + organization_settings.OrganizationSettings() + ) - request = securitycenter_service.DeleteMuteConfigRequest() + request = securitycenter_service.GetOrganizationSettingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata + post.return_value = organization_settings.OrganizationSettings() - client.delete_mute_config( + client.get_organization_settings( request, metadata=[ ("key", "val"), @@ -13438,10 +18727,12 @@ def test_delete_mute_config_rest_interceptors(null_interceptor): ) pre.assert_called_once() + post.assert_called_once() -def test_delete_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.DeleteMuteConfigRequest +def test_get_organization_settings_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.GetOrganizationSettingsRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13449,7 +18740,7 @@ def test_delete_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"name": "organizations/sample1/organizationSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13461,10 +18752,10 @@ def test_delete_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_mute_config(request) + client.get_organization_settings(request) -def test_delete_mute_config_rest_flattened(): +def test_get_organization_settings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13473,10 +18764,10 @@ def test_delete_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = organization_settings.OrganizationSettings() # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} + sample_request = {"name": "organizations/sample1/organizationSettings"} # get truthy value for each flattened field mock_args = dict( @@ -13487,23 +18778,25 @@ def test_delete_mute_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_mute_config(**mock_args) + client.get_organization_settings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, + "%s/v1/{name=organizations/*/organizationSettings}" + % client.transport._host, args[1], ) -def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): +def test_get_organization_settings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13512,13 +18805,13 @@ def test_delete_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_mute_config( - securitycenter_service.DeleteMuteConfigRequest(), + client.get_organization_settings( + securitycenter_service.GetOrganizationSettingsRequest(), name="name_value", ) -def test_delete_mute_config_rest_error(): +def test_get_organization_settings_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13527,40 +18820,58 @@ def test_delete_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.DeleteNotificationConfigRequest, + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_delete_notification_config_rest(request_type): +def test_get_effective_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule( + name="name_value", + enablement_state=effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + display_name="display_name_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_notification_config(request) + response = client.get_effective_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert response is None + assert isinstance( + response, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, + ) + assert response.name == "name_value" + assert ( + response.enablement_state + == effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.display_name == "display_name_value" -def test_delete_notification_config_rest_required_fields( - request_type=securitycenter_service.DeleteNotificationConfigRequest, +def test_get_effective_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13580,7 +18891,9 @@ def test_delete_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_notification_config._get_unset_required_fields(jsonified_request) + ).get_effective_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13589,7 +18902,9 @@ def test_delete_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).delete_notification_config._get_unset_required_fields(jsonified_request) + ).get_effective_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13603,7 +18918,9 @@ def test_delete_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = None + return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13615,36 +18932,46 @@ def test_delete_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "delete", + "method": "get", "query_params": pb_request, } transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - json_return_value = "" + + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.delete_notification_config(request) + response = client.get_effective_security_health_analytics_custom_module( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_delete_notification_config_rest_unset_required_fields(): +def test_get_effective_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.delete_notification_config._get_unset_required_fields({}) + unset_fields = transport.get_effective_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_delete_notification_config_rest_interceptors(null_interceptor): +def test_get_effective_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13657,11 +18984,16 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_delete_notification_config" + transports.SecurityCenterRestInterceptor, + "post_get_effective_security_health_analytics_custom_module", + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, + "pre_get_effective_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() - pb_message = securitycenter_service.DeleteNotificationConfigRequest.pb( - securitycenter_service.DeleteNotificationConfigRequest() + post.assert_not_called() + pb_message = securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() ) transcode.return_value = { "method": "post", @@ -13673,15 +19005,23 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() + req.return_value._content = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.to_json( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - request = securitycenter_service.DeleteNotificationConfigRequest() + request = ( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata + post.return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) - client.delete_notification_config( + client.get_effective_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -13690,11 +19030,12 @@ def test_delete_notification_config_rest_interceptors(null_interceptor): ) pre.assert_called_once() + post.assert_called_once() -def test_delete_notification_config_rest_bad_request( +def test_get_effective_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.DeleteNotificationConfigRequest, + request_type=securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13702,7 +19043,9 @@ def test_delete_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13714,10 +19057,10 @@ def test_delete_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.delete_notification_config(request) + client.get_effective_security_health_analytics_custom_module(request) -def test_delete_notification_config_rest_flattened(): +def test_get_effective_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -13726,10 +19069,14 @@ def test_delete_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = None + return_value = ( + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/effectiveCustomModules/sample2" + } # get truthy value for each flattened field mock_args = dict( @@ -13740,24 +19087,29 @@ def test_delete_notification_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = "" + pb_return_value = effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.delete_notification_config(**mock_args) + client.get_effective_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/notificationConfigs/*}" + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/effectiveCustomModules/*}" % client.transport._host, args[1], ) -def test_delete_notification_config_rest_flattened_error(transport: str = "rest"): +def test_get_effective_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -13766,13 +19118,13 @@ def test_delete_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.delete_notification_config( - securitycenter_service.DeleteNotificationConfigRequest(), + client.get_effective_security_health_analytics_custom_module( + securitycenter_service.GetEffectiveSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) -def test_delete_notification_config_rest_error(): +def test_get_effective_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -13781,54 +19133,62 @@ def test_delete_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetBigQueryExportRequest, + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_get_big_query_export_rest(request_type): +def test_get_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport( + return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - description="description_value", - filter="filter_value", - dataset="dataset_value", - most_recent_editor="most_recent_editor_value", - principal="principal_value", + display_name="display_name_value", + enablement_state=security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_big_query_export(request) + response = client.get_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert isinstance(response, bigquery_export.BigQueryExport) + assert isinstance( + response, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.dataset == "dataset_value" - assert response.most_recent_editor == "most_recent_editor_value" - assert response.principal == "principal_value" + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_get_big_query_export_rest_required_fields( - request_type=securitycenter_service.GetBigQueryExportRequest, +def test_get_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -13848,7 +19208,9 @@ def test_get_big_query_export_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_big_query_export._get_unset_required_fields(jsonified_request) + ).get_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -13857,7 +19219,9 @@ def test_get_big_query_export_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_big_query_export._get_unset_required_fields(jsonified_request) + ).get_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -13871,7 +19235,9 @@ def test_get_big_query_export_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() + return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -13891,30 +19257,36 @@ def test_get_big_query_export_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_big_query_export(request) + response = client.get_security_health_analytics_custom_module(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_big_query_export_rest_unset_required_fields(): +def test_get_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_big_query_export._get_unset_required_fields({}) + unset_fields = transport.get_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_big_query_export_rest_interceptors(null_interceptor): +def test_get_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -13927,14 +19299,18 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_big_query_export" + transports.SecurityCenterRestInterceptor, + "post_get_security_health_analytics_custom_module", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_big_query_export" + transports.SecurityCenterRestInterceptor, + "pre_get_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetBigQueryExportRequest.pb( - securitycenter_service.GetBigQueryExportRequest() + pb_message = ( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() + ) ) transcode.return_value = { "method": "post", @@ -13946,19 +19322,21 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = bigquery_export.BigQueryExport.to_json( - bigquery_export.BigQueryExport() + req.return_value._content = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - request = securitycenter_service.GetBigQueryExportRequest() + request = securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = bigquery_export.BigQueryExport() + post.return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) - client.get_big_query_export( + client.get_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -13970,9 +19348,9 @@ def test_get_big_query_export_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_big_query_export_rest_bad_request( +def test_get_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.GetBigQueryExportRequest, + request_type=securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -13980,7 +19358,9 @@ def test_get_big_query_export_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/bigQueryExports/sample2"} + request_init = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -13992,10 +19372,10 @@ def test_get_big_query_export_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_big_query_export(request) + client.get_security_health_analytics_custom_module(request) -def test_get_big_query_export_rest_flattened(): +def test_get_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14004,10 +19384,14 @@ def test_get_big_query_export_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = bigquery_export.BigQueryExport() + return_value = ( + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/bigQueryExports/sample2"} + sample_request = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } # get truthy value for each flattened field mock_args = dict( @@ -14018,24 +19402,29 @@ def test_get_big_query_export_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = bigquery_export.BigQueryExport.pb(return_value) + pb_return_value = security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_big_query_export(**mock_args) + client.get_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/bigQueryExports/*}" % client.transport._host, + "%s/v1/{name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" + % client.transport._host, args[1], ) -def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): +def test_get_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14044,13 +19433,13 @@ def test_get_big_query_export_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_big_query_export( - securitycenter_service.GetBigQueryExportRequest(), + client.get_security_health_analytics_custom_module( + securitycenter_service.GetSecurityHealthAnalyticsCustomModuleRequest(), name="name_value", ) -def test_get_big_query_export_rest_error(): +def test_get_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14059,53 +19448,57 @@ def test_get_big_query_export_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.GetIamPolicyRequest, + securitycenter_service.GetSourceRequest, dict, ], ) -def test_get_iam_policy_rest(request_type): +def test_get_source_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = {"name": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + return_value = source.Source( + name="name_value", + display_name="display_name_value", + description="description_value", + canonical_name="canonical_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get_source(request) # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, source.Source) + assert response.name == "name_value" + assert response.display_name == "display_name_value" + assert response.description == "description_value" + assert response.canonical_name == "canonical_name_value" -def test_get_iam_policy_rest_required_fields( - request_type=iam_policy_pb2.GetIamPolicyRequest, +def test_get_source_rest_required_fields( + request_type=securitycenter_service.GetSourceRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["resource"] = "" + request_init["name"] = "" request = request_type(**request_init) - pb_request = request + pb_request = request_type.pb(request) jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -14118,21 +19511,21 @@ def test_get_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get_source._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["resource"] = "resource_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_iam_policy._get_unset_required_fields(jsonified_request) + ).get_source._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14141,7 +19534,7 @@ def test_get_iam_policy_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = source.Source() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14150,42 +19543,41 @@ def test_get_iam_policy_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request + pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_iam_policy(request) + response = client.get_source(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_iam_policy_rest_unset_required_fields(): +def test_get_source_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_iam_policy._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("resource",))) + unset_fields = transport.get_source._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("name",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_iam_policy_rest_interceptors(null_interceptor): +def test_get_source_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14198,13 +19590,15 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_iam_policy" + transports.SecurityCenterRestInterceptor, "post_get_source" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_iam_policy" + transports.SecurityCenterRestInterceptor, "pre_get_source" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.GetIamPolicyRequest() + pb_message = securitycenter_service.GetSourceRequest.pb( + securitycenter_service.GetSourceRequest() + ) transcode.return_value = { "method": "post", "uri": "my_uri", @@ -14215,17 +19609,17 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + req.return_value._content = source.Source.to_json(source.Source()) - request = iam_policy_pb2.GetIamPolicyRequest() + request = securitycenter_service.GetSourceRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() + post.return_value = source.Source() - client.get_iam_policy( + client.get_source( request, metadata=[ ("key", "val"), @@ -14237,8 +19631,8 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_iam_policy_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.GetIamPolicyRequest +def test_get_source_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GetSourceRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14246,7 +19640,7 @@ def test_get_iam_policy_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = {"name": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14258,10 +19652,10 @@ def test_get_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_iam_policy(request) + client.get_source(request) -def test_get_iam_policy_rest_flattened(): +def test_get_source_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14270,39 +19664,37 @@ def test_get_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = source.Source() # get arguments that satisfy an http rule for this method - sample_request = {"resource": "organizations/sample1/sources/sample2"} + sample_request = {"name": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - resource="resource_value", + name="name_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = source.Source.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_iam_policy(**mock_args) + client.get_source(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:getIamPolicy" - % client.transport._host, - args[1], + "%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1] ) -def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_get_source_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14311,13 +19703,13 @@ def test_get_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_iam_policy( - iam_policy_pb2.GetIamPolicyRequest(), - resource="resource_value", + client.get_source( + securitycenter_service.GetSourceRequest(), + name="name_value", ) -def test_get_iam_policy_rest_error(): +def test_get_source_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -14326,57 +19718,52 @@ def test_get_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetMuteConfigRequest, + securitycenter_service.GroupAssetsRequest, dict, ], ) -def test_get_mute_config_rest(request_type): +def test_group_assets_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig( - name="name_value", - display_name="display_name_value", - description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + return_value = securitycenter_service.GroupAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_mute_config(request) + response = client.group_assets(request) # Establish that the response is the type that we expect. - assert isinstance(response, mute_config.MuteConfig) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert isinstance(response, pagers.GroupAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_mute_config_rest_required_fields( - request_type=securitycenter_service.GetMuteConfigRequest, +def test_group_assets_rest_required_fields( + request_type=securitycenter_service.GroupAssetsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" + request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14391,21 +19778,24 @@ def test_get_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_mute_config._get_unset_required_fields(jsonified_request) + ).group_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" + jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_mute_config._get_unset_required_fields(jsonified_request) + ).group_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14414,7 +19804,7 @@ def test_get_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() + return_value = securitycenter_service.GroupAssetsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14426,38 +19816,49 @@ def test_get_mute_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupAssetsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_mute_config(request) + response = client.group_assets(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_mute_config_rest_unset_required_fields(): +def test_group_assets_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.group_assets._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "groupBy", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_mute_config_rest_interceptors(null_interceptor): +def test_group_assets_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14470,14 +19871,14 @@ def test_get_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_mute_config" + transports.SecurityCenterRestInterceptor, "post_group_assets" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_mute_config" + transports.SecurityCenterRestInterceptor, "pre_group_assets" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetMuteConfigRequest.pb( - securitycenter_service.GetMuteConfigRequest() + pb_message = securitycenter_service.GroupAssetsRequest.pb( + securitycenter_service.GroupAssetsRequest() ) transcode.return_value = { "method": "post", @@ -14489,19 +19890,19 @@ def test_get_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = mute_config.MuteConfig.to_json( - mute_config.MuteConfig() + req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json( + securitycenter_service.GroupAssetsResponse() ) - request = securitycenter_service.GetMuteConfigRequest() + request = securitycenter_service.GroupAssetsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = mute_config.MuteConfig() + post.return_value = securitycenter_service.GroupAssetsResponse() - client.get_mute_config( + client.group_assets( request, metadata=[ ("key", "val"), @@ -14513,8 +19914,8 @@ def test_get_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GetMuteConfigRequest +def test_group_assets_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GroupAssetsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14522,7 +19923,7 @@ def test_get_mute_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/muteConfigs/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14534,125 +19935,121 @@ def test_get_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_mute_config(request) + client.group_assets(request) -def test_get_mute_config_rest_flattened(): +def test_group_assets_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = mute_config.MuteConfig() - - # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/muteConfigs/sample2"} - - # get truthy value for each flattened field - mock_args = dict( - name="name_value", - ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = mute_config.MuteConfig.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.get_mute_config(**mock_args) - - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{name=organizations/*/muteConfigs/*}" % client.transport._host, - args[1], + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.GroupAssetsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), ) + # Two responses for two calls + response = response + response + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.GroupAssetsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values -def test_get_mute_config_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) + sample_request = {"parent": "organizations/sample1"} - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_mute_config( - securitycenter_service.GetMuteConfigRequest(), - name="name_value", - ) + pager = client.group_assets(request=sample_request) + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) -def test_get_mute_config_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + pages = list(client.group_assets(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetNotificationConfigRequest, + securitycenter_service.GroupFindingsRequest, dict, ], ) -def test_get_notification_config_rest(request_type): +def test_group_findings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig( - name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + return_value = securitycenter_service.GroupFindingsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_notification_config(request) + response = client.group_findings(request) # Establish that the response is the type that we expect. - assert isinstance(response, notification_config.NotificationConfig) - assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert isinstance(response, pagers.GroupFindingsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_notification_config_rest_required_fields( - request_type=securitycenter_service.GetNotificationConfigRequest, +def test_group_findings_rest_required_fields( + request_type=securitycenter_service.GroupFindingsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" + request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14667,21 +20064,24 @@ def test_get_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_notification_config._get_unset_required_fields(jsonified_request) + ).group_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" + jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_notification_config._get_unset_required_fields(jsonified_request) + ).group_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" + assert "groupBy" in jsonified_request + assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14690,7 +20090,7 @@ def test_get_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() + return_value = securitycenter_service.GroupFindingsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14702,38 +20102,49 @@ def test_get_notification_config_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_notification_config(request) + response = client.group_findings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_notification_config_rest_unset_required_fields(): +def test_group_findings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.group_findings._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "parent", + "groupBy", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_notification_config_rest_interceptors(null_interceptor): +def test_group_findings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -14746,14 +20157,14 @@ def test_get_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_notification_config" + transports.SecurityCenterRestInterceptor, "post_group_findings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_notification_config" + transports.SecurityCenterRestInterceptor, "pre_group_findings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetNotificationConfigRequest.pb( - securitycenter_service.GetNotificationConfigRequest() + pb_message = securitycenter_service.GroupFindingsRequest.pb( + securitycenter_service.GroupFindingsRequest() ) transcode.return_value = { "method": "post", @@ -14765,19 +20176,21 @@ def test_get_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = notification_config.NotificationConfig.to_json( - notification_config.NotificationConfig() + req.return_value._content = ( + securitycenter_service.GroupFindingsResponse.to_json( + securitycenter_service.GroupFindingsResponse() + ) ) - request = securitycenter_service.GetNotificationConfigRequest() + request = securitycenter_service.GroupFindingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = notification_config.NotificationConfig() + post.return_value = securitycenter_service.GroupFindingsResponse() - client.get_notification_config( + client.group_findings( request, metadata=[ ("key", "val"), @@ -14789,9 +20202,8 @@ def test_get_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_notification_config_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.GetNotificationConfigRequest, +def test_group_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.GroupFindingsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14799,7 +20211,7 @@ def test_get_notification_config_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/notificationConfigs/sample2"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -14811,10 +20223,10 @@ def test_get_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_notification_config(request) + client.group_findings(request) -def test_get_notification_config_rest_flattened(): +def test_group_findings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -14823,39 +20235,40 @@ def test_get_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = notification_config.NotificationConfig() + return_value = securitycenter_service.GroupFindingsResponse() # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/notificationConfigs/sample2"} + sample_request = {"parent": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - name="name_value", + parent="parent_value", + group_by="group_by_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = notification_config.NotificationConfig.pb(return_value) + pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_notification_config(**mock_args) + client.group_findings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/notificationConfigs/*}" + "%s/v1/{parent=organizations/*/sources/*}/findings:group" % client.transport._host, args[1], ) -def test_get_notification_config_rest_flattened_error(transport: str = "rest"): +def test_group_findings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -14864,66 +20277,124 @@ def test_get_notification_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_notification_config( - securitycenter_service.GetNotificationConfigRequest(), - name="name_value", + client.group_findings( + securitycenter_service.GroupFindingsRequest(), + parent="parent_value", + group_by="group_by_value", ) -def test_get_notification_config_rest_error(): +def test_group_findings_rest_pager(transport: str = "rest"): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + next_page_token="abc", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[], + next_page_token="def", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.GroupFindingsResponse( + group_by_results=[ + securitycenter_service.GroupResult(), + securitycenter_service.GroupResult(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.GroupFindingsResponse.to_json(x) for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = {"parent": "organizations/sample1/sources/sample2"} + + pager = client.group_findings(request=sample_request) + + results = list(pager) + assert len(results) == 6 + assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + + pages = list(client.group_findings(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetOrganizationSettingsRequest, + securitycenter_service.ListAssetsRequest, dict, ], ) -def test_get_organization_settings_rest(request_type): +def test_list_assets_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/organizationSettings"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings( - name="name_value", - enable_asset_discovery=True, + return_value = securitycenter_service.ListAssetsResponse( + next_page_token="next_page_token_value", + total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_organization_settings(request) + response = client.list_assets(request) # Establish that the response is the type that we expect. - assert isinstance(response, organization_settings.OrganizationSettings) - assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert isinstance(response, pagers.ListAssetsPager) + assert response.next_page_token == "next_page_token_value" + assert response.total_size == 1086 -def test_get_organization_settings_rest_required_fields( - request_type=securitycenter_service.GetOrganizationSettingsRequest, +def test_list_assets_rest_required_fields( + request_type=securitycenter_service.ListAssetsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -14938,21 +20409,33 @@ def test_get_organization_settings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_organization_settings._get_unset_required_fields(jsonified_request) + ).list_assets._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_organization_settings._get_unset_required_fields(jsonified_request) + ).list_assets._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "compare_duration", + "field_mask", + "filter", + "order_by", + "page_size", + "page_token", + "read_time", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -14961,7 +20444,7 @@ def test_get_organization_settings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() + return_value = securitycenter_service.ListAssetsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -14981,32 +20464,43 @@ def test_get_organization_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb( - return_value - ) + pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_organization_settings(request) + response = client.list_assets(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_organization_settings_rest_unset_required_fields(): +def test_list_assets_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.list_assets._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "compareDuration", + "fieldMask", + "filter", + "orderBy", + "pageSize", + "pageToken", + "readTime", + ) + ) + & set(("parent",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_organization_settings_rest_interceptors(null_interceptor): +def test_list_assets_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15019,14 +20513,14 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_organization_settings" + transports.SecurityCenterRestInterceptor, "post_list_assets" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_organization_settings" + transports.SecurityCenterRestInterceptor, "pre_list_assets" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetOrganizationSettingsRequest.pb( - securitycenter_service.GetOrganizationSettingsRequest() + pb_message = securitycenter_service.ListAssetsRequest.pb( + securitycenter_service.ListAssetsRequest() ) transcode.return_value = { "method": "post", @@ -15038,19 +20532,19 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = organization_settings.OrganizationSettings.to_json( - organization_settings.OrganizationSettings() + req.return_value._content = securitycenter_service.ListAssetsResponse.to_json( + securitycenter_service.ListAssetsResponse() ) - request = securitycenter_service.GetOrganizationSettingsRequest() + request = securitycenter_service.ListAssetsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = organization_settings.OrganizationSettings() + post.return_value = securitycenter_service.ListAssetsResponse() - client.get_organization_settings( + client.list_assets( request, metadata=[ ("key", "val"), @@ -15062,9 +20556,8 @@ def test_get_organization_settings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_organization_settings_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.GetOrganizationSettingsRequest, +def test_list_assets_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListAssetsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15072,7 +20565,7 @@ def test_get_organization_settings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/organizationSettings"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15084,123 +20577,127 @@ def test_get_organization_settings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_organization_settings(request) + client.list_assets(request) -def test_get_organization_settings_rest_flattened(): +def test_list_assets_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = organization_settings.OrganizationSettings() - - # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/organizationSettings"} - - # get truthy value for each flattened field - mock_args = dict( - name="name_value", + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token="abc", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[], + next_page_token="def", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListAssetsResponse( + list_assets_results=[ + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListAssetsResponse.ListAssetsResult(), + ], + ), ) - mock_args.update(sample_request) - - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = organization_settings.OrganizationSettings.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - client.get_organization_settings(**mock_args) + # Two responses for two calls + response = response + response - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{name=organizations/*/organizationSettings}" - % client.transport._host, - args[1], + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.ListAssetsResponse.to_json(x) for x in response ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + sample_request = {"parent": "organizations/sample1"} -def test_get_organization_settings_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) + pager = client.list_assets(request=sample_request) - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.get_organization_settings( - securitycenter_service.GetOrganizationSettingsRequest(), - name="name_value", + results = list(pager) + assert len(results) == 6 + assert all( + isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) + for i in results ) - -def test_get_organization_settings_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + pages = list(client.list_assets(request=sample_request).pages) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GetSourceRequest, + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_get_source_rest(request_type): +def test_list_descendant_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = source.Source( - name="name_value", - display_name="display_name_value", - description="description_value", - canonical_name="canonical_name_value", + return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_source(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) # Establish that the response is the type that we expect. - assert isinstance(response, source.Source) - assert response.name == "name_value" - assert response.display_name == "display_name_value" - assert response.description == "description_value" - assert response.canonical_name == "canonical_name_value" + assert isinstance( + response, pagers.ListDescendantSecurityHealthAnalyticsCustomModulesPager + ) + assert response.next_page_token == "next_page_token_value" -def test_get_source_rest_required_fields( - request_type=securitycenter_service.GetSourceRequest, +def test_list_descendant_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["parent"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15215,21 +20712,32 @@ def test_get_source_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_source._get_unset_required_fields(jsonified_request) + ).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["parent"] = "parent_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).get_source._get_unset_required_fields(jsonified_request) + ).list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "page_size", + "page_token", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "parent" in jsonified_request + assert jsonified_request["parent"] == "parent_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15238,7 +20746,9 @@ def test_get_source_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = source.Source() + return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15258,30 +20768,46 @@ def test_get_source_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.get_source(request) + response = client.list_descendant_security_health_analytics_custom_modules( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_get_source_rest_unset_required_fields(): +def test_list_descendant_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.get_source._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("name",))) + unset_fields = transport.list_descendant_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set( + ( + "pageSize", + "pageToken", + ) + ) + & set(("parent",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_get_source_rest_interceptors(null_interceptor): +def test_list_descendant_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15294,14 +20820,16 @@ def test_get_source_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_get_source" + transports.SecurityCenterRestInterceptor, + "post_list_descendant_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_get_source" + transports.SecurityCenterRestInterceptor, + "pre_list_descendant_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GetSourceRequest.pb( - securitycenter_service.GetSourceRequest() + pb_message = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() ) transcode.return_value = { "method": "post", @@ -15313,17 +20841,23 @@ def test_get_source_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = source.Source.to_json(source.Source()) + req.return_value._content = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) - request = securitycenter_service.GetSourceRequest() + request = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = source.Source() + post.return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) - client.get_source( + client.list_descendant_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -15335,8 +20869,9 @@ def test_get_source_rest_interceptors(null_interceptor): post.assert_called_once() -def test_get_source_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GetSourceRequest +def test_list_descendant_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15344,7 +20879,7 @@ def test_get_source_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15356,10 +20891,10 @@ def test_get_source_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.get_source(request) + client.list_descendant_security_health_analytics_custom_modules(request) -def test_get_source_rest_flattened(): +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15368,37 +20903,47 @@ def test_get_source_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = source.Source() + return_value = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse() + ) # get arguments that satisfy an http rule for this method - sample_request = {"name": "organizations/sample1/sources/sample2"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } # get truthy value for each flattened field mock_args = dict( - name="name_value", + parent="parent_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = source.Source.pb(return_value) + pb_return_value = securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.get_source(**mock_args) + client.list_descendant_security_health_analytics_custom_modules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*}" % client.transport._host, args[1] + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules:listDescendant" + % client.transport._host, + args[1], ) -def test_get_source_rest_flattened_error(transport: str = "rest"): +def test_list_descendant_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15407,39 +20952,115 @@ def test_get_source_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.get_source( - securitycenter_service.GetSourceRequest(), - name="name_value", + client.list_descendant_security_health_analytics_custom_modules( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", ) -def test_get_source_rest_error(): +def test_list_descendant_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # TODO(kbandes): remove this mock unless there's a good reason for it. + # with mock.patch.object(path_template, 'transcode') as transcode: + # Set the response as a series of pages + response = ( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="abc", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], + next_page_token="def", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + next_page_token="ghi", + ), + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + ], + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple( + securitycenter_service.ListDescendantSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response + ) + return_values = tuple(Response() for i in response) + for return_val, response_val in zip(return_values, response): + return_val._content = response_val.encode("UTF-8") + return_val.status_code = 200 + req.side_effect = return_values + + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + pager = client.list_descendant_security_health_analytics_custom_modules( + request=sample_request + ) + + results = list(pager) + assert len(results) == 6 + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) + + pages = list( + client.list_descendant_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) + for page_, token in zip(pages, ["abc", "def", "ghi", ""]): + assert page_.raw_page.next_page_token == token + @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupAssetsRequest, + securitycenter_service.ListFindingsRequest, dict, ], ) -def test_group_assets_rest(request_type): +def test_list_findings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse( + return_value = securitycenter_service.ListFindingsResponse( next_page_token="next_page_token_value", total_size=1086, ) @@ -15447,27 +21068,26 @@ def test_group_assets_rest(request_type): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_assets(request) + response = client.list_findings(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupAssetsPager) + assert isinstance(response, pagers.ListFindingsPager) assert response.next_page_token == "next_page_token_value" assert response.total_size == 1086 -def test_group_assets_rest_required_fields( - request_type=securitycenter_service.GroupAssetsRequest, +def test_list_findings_rest_required_fields( + request_type=securitycenter_service.ListFindingsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["parent"] = "" - request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15482,24 +21102,33 @@ def test_group_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_assets._get_unset_required_fields(jsonified_request) + ).list_findings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["parent"] = "parent_value" - jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_assets._get_unset_required_fields(jsonified_request) + ).list_findings._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "compare_duration", + "field_mask", + "filter", + "order_by", + "page_size", + "page_token", + "read_time", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "parent" in jsonified_request assert jsonified_request["parent"] == "parent_value" - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15508,7 +21137,7 @@ def test_group_assets_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupAssetsResponse() + return_value = securitycenter_service.ListFindingsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15520,16 +21149,15 @@ def test_group_assets_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupAssetsResponse.pb( + pb_return_value = securitycenter_service.ListFindingsResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -15537,32 +21165,37 @@ def test_group_assets_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_assets(request) + response = client.list_findings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_group_assets_rest_unset_required_fields(): +def test_list_findings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.group_assets._get_unset_required_fields({}) + unset_fields = transport.list_findings._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "parent", - "groupBy", + "compareDuration", + "fieldMask", + "filter", + "orderBy", + "pageSize", + "pageToken", + "readTime", ) ) + & set(("parent",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_assets_rest_interceptors(null_interceptor): +def test_list_findings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15575,14 +21208,14 @@ def test_group_assets_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_group_assets" + transports.SecurityCenterRestInterceptor, "post_list_findings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_group_assets" + transports.SecurityCenterRestInterceptor, "pre_list_findings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GroupAssetsRequest.pb( - securitycenter_service.GroupAssetsRequest() + pb_message = securitycenter_service.ListFindingsRequest.pb( + securitycenter_service.ListFindingsRequest() ) transcode.return_value = { "method": "post", @@ -15594,19 +21227,19 @@ def test_group_assets_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.GroupAssetsResponse.to_json( - securitycenter_service.GroupAssetsResponse() + req.return_value._content = securitycenter_service.ListFindingsResponse.to_json( + securitycenter_service.ListFindingsResponse() ) - request = securitycenter_service.GroupAssetsRequest() + request = securitycenter_service.ListFindingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupAssetsResponse() + post.return_value = securitycenter_service.ListFindingsResponse() - client.group_assets( + client.list_findings( request, metadata=[ ("key", "val"), @@ -15618,8 +21251,8 @@ def test_group_assets_rest_interceptors(null_interceptor): post.assert_called_once() -def test_group_assets_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GroupAssetsRequest +def test_list_findings_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListFindingsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15627,7 +21260,7 @@ def test_group_assets_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15639,10 +21272,10 @@ def test_group_assets_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.group_assets(request) + client.list_findings(request) -def test_group_assets_rest_pager(transport: str = "rest"): +def test_list_findings_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15654,28 +21287,28 @@ def test_group_assets_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="abc", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[], + securitycenter_service.ListFindingsResponse( + list_findings_results=[], next_page_token="def", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], next_page_token="ghi", ), - securitycenter_service.GroupAssetsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListFindingsResponse( + list_findings_results=[ + securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListFindingsResponse.ListFindingsResult(), ], ), ) @@ -15684,7 +21317,7 @@ def test_group_assets_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.GroupAssetsResponse.to_json(x) for x in response + securitycenter_service.ListFindingsResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -15692,15 +21325,20 @@ def test_group_assets_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1"} + sample_request = {"parent": "organizations/sample1/sources/sample2"} - pager = client.group_assets(request=sample_request) + pager = client.list_findings(request=sample_request) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + assert all( + isinstance( + i, securitycenter_service.ListFindingsResponse.ListFindingsResult + ) + for i in results + ) - pages = list(client.group_assets(request=sample_request).pages) + pages = list(client.list_findings(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -15708,52 +21346,51 @@ def test_group_assets_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.GroupFindingsRequest, + securitycenter_service.ListMuteConfigsRequest, dict, ], ) -def test_group_findings_rest(request_type): +def test_list_mute_configs_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse( + return_value = securitycenter_service.ListMuteConfigsResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_findings(request) + response = client.list_mute_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.GroupFindingsPager) + assert isinstance(response, pagers.ListMuteConfigsPager) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_group_findings_rest_required_fields( - request_type=securitycenter_service.GroupFindingsRequest, +def test_list_mute_configs_rest_required_fields( + request_type=securitycenter_service.ListMuteConfigsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["parent"] = "" - request_init["group_by"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -15768,24 +21405,28 @@ def test_group_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_findings._get_unset_required_fields(jsonified_request) + ).list_mute_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["parent"] = "parent_value" - jsonified_request["groupBy"] = "group_by_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).group_findings._get_unset_required_fields(jsonified_request) + ).list_mute_configs._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set( + ( + "page_size", + "page_token", + ) + ) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "parent" in jsonified_request assert jsonified_request["parent"] == "parent_value" - assert "groupBy" in jsonified_request - assert jsonified_request["groupBy"] == "group_by_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15794,7 +21435,7 @@ def test_group_findings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() + return_value = securitycenter_service.ListMuteConfigsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -15806,16 +21447,15 @@ def test_group_findings_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "get", "query_params": pb_request, } - transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb( + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -15823,32 +21463,32 @@ def test_group_findings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.group_findings(request) + response = client.list_mute_configs(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_group_findings_rest_unset_required_fields(): +def test_list_mute_configs_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.group_findings._get_unset_required_fields({}) + unset_fields = transport.list_mute_configs._get_unset_required_fields({}) assert set(unset_fields) == ( - set(()) - & set( + set( ( - "parent", - "groupBy", + "pageSize", + "pageToken", ) ) + & set(("parent",)) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_group_findings_rest_interceptors(null_interceptor): +def test_list_mute_configs_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -15861,14 +21501,14 @@ def test_group_findings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_group_findings" + transports.SecurityCenterRestInterceptor, "post_list_mute_configs" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_group_findings" + transports.SecurityCenterRestInterceptor, "pre_list_mute_configs" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.GroupFindingsRequest.pb( - securitycenter_service.GroupFindingsRequest() + pb_message = securitycenter_service.ListMuteConfigsRequest.pb( + securitycenter_service.ListMuteConfigsRequest() ) transcode.return_value = { "method": "post", @@ -15881,20 +21521,20 @@ def test_group_findings_rest_interceptors(null_interceptor): req.return_value.status_code = 200 req.return_value.request = PreparedRequest() req.return_value._content = ( - securitycenter_service.GroupFindingsResponse.to_json( - securitycenter_service.GroupFindingsResponse() + securitycenter_service.ListMuteConfigsResponse.to_json( + securitycenter_service.ListMuteConfigsResponse() ) ) - request = securitycenter_service.GroupFindingsRequest() + request = securitycenter_service.ListMuteConfigsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.GroupFindingsResponse() + post.return_value = securitycenter_service.ListMuteConfigsResponse() - client.group_findings( + client.list_mute_configs( request, metadata=[ ("key", "val"), @@ -15906,8 +21546,8 @@ def test_group_findings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_group_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.GroupFindingsRequest +def test_list_mute_configs_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListMuteConfigsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -15915,7 +21555,7 @@ def test_group_findings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -15927,10 +21567,10 @@ def test_group_findings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.group_findings(request) + client.list_mute_configs(request) -def test_group_findings_rest_flattened(): +def test_list_mute_configs_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -15939,40 +21579,40 @@ def test_group_findings_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.GroupFindingsResponse() + return_value = securitycenter_service.ListMuteConfigsResponse() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"parent": "organizations/sample1"} # get truthy value for each flattened field mock_args = dict( parent="parent_value", - group_by="group_by_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.GroupFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.group_findings(**mock_args) + client.list_mute_configs(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*/sources/*}/findings:group" - % client.transport._host, + "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, args[1], ) -def test_group_findings_rest_flattened_error(transport: str = "rest"): +def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -15981,14 +21621,13 @@ def test_group_findings_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.group_findings( - securitycenter_service.GroupFindingsRequest(), + client.list_mute_configs( + securitycenter_service.ListMuteConfigsRequest(), parent="parent_value", - group_by="group_by_value", ) -def test_group_findings_rest_pager(transport: str = "rest"): +def test_list_mute_configs_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16000,28 +21639,28 @@ def test_group_findings_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], next_page_token="abc", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[], + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[], next_page_token="def", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), ], next_page_token="ghi", ), - securitycenter_service.GroupFindingsResponse( - group_by_results=[ - securitycenter_service.GroupResult(), - securitycenter_service.GroupResult(), + securitycenter_service.ListMuteConfigsResponse( + mute_configs=[ + mute_config.MuteConfig(), + mute_config.MuteConfig(), ], ), ) @@ -16030,7 +21669,7 @@ def test_group_findings_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.GroupFindingsResponse.to_json(x) for x in response + securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16038,15 +21677,15 @@ def test_group_findings_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = {"parent": "organizations/sample1"} - pager = client.group_findings(request=sample_request) + pager = client.list_mute_configs(request=sample_request) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, securitycenter_service.GroupResult) for i in results) + assert all(isinstance(i, mute_config.MuteConfig) for i in results) - pages = list(client.group_findings(request=sample_request).pages) + pages = list(client.list_mute_configs(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16054,11 +21693,11 @@ def test_group_findings_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListAssetsRequest, + securitycenter_service.ListNotificationConfigsRequest, dict, ], ) -def test_list_assets_rest(request_type): +def test_list_notification_configs_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -16071,29 +21710,29 @@ def test_list_assets_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse( + return_value = securitycenter_service.ListNotificationConfigsResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_assets(request) + response = client.list_notification_configs(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListAssetsPager) + assert isinstance(response, pagers.ListNotificationConfigsPager) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_list_assets_rest_required_fields( - request_type=securitycenter_service.ListAssetsRequest, +def test_list_notification_configs_rest_required_fields( + request_type=securitycenter_service.ListNotificationConfigsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16113,7 +21752,7 @@ def test_list_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_assets._get_unset_required_fields(jsonified_request) + ).list_notification_configs._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16122,17 +21761,12 @@ def test_list_assets_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_assets._get_unset_required_fields(jsonified_request) + ).list_notification_configs._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "compare_duration", - "field_mask", - "filter", - "order_by", "page_size", "page_token", - "read_time", ) ) jsonified_request.update(unset_fields) @@ -16148,7 +21782,7 @@ def test_list_assets_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListAssetsResponse() + return_value = securitycenter_service.ListNotificationConfigsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16168,35 +21802,32 @@ def test_list_assets_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListAssetsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_assets(request) + response = client.list_notification_configs(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_assets_rest_unset_required_fields(): +def test_list_notification_configs_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_assets._get_unset_required_fields({}) + unset_fields = transport.list_notification_configs._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( - "compareDuration", - "fieldMask", - "filter", - "orderBy", "pageSize", "pageToken", - "readTime", ) ) & set(("parent",)) @@ -16204,7 +21835,7 @@ def test_list_assets_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_assets_rest_interceptors(null_interceptor): +def test_list_notification_configs_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16217,14 +21848,14 @@ def test_list_assets_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_assets" + transports.SecurityCenterRestInterceptor, "post_list_notification_configs" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_assets" + transports.SecurityCenterRestInterceptor, "pre_list_notification_configs" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListAssetsRequest.pb( - securitycenter_service.ListAssetsRequest() + pb_message = securitycenter_service.ListNotificationConfigsRequest.pb( + securitycenter_service.ListNotificationConfigsRequest() ) transcode.return_value = { "method": "post", @@ -16236,19 +21867,21 @@ def test_list_assets_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListAssetsResponse.to_json( - securitycenter_service.ListAssetsResponse() + req.return_value._content = ( + securitycenter_service.ListNotificationConfigsResponse.to_json( + securitycenter_service.ListNotificationConfigsResponse() + ) ) - request = securitycenter_service.ListAssetsRequest() + request = securitycenter_service.ListNotificationConfigsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListAssetsResponse() + post.return_value = securitycenter_service.ListNotificationConfigsResponse() - client.list_assets( + client.list_notification_configs( request, metadata=[ ("key", "val"), @@ -16260,31 +21893,90 @@ def test_list_assets_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_assets_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListAssetsRequest -): +def test_list_notification_configs_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListNotificationConfigsRequest, +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"parent": "organizations/sample1"} + request = request_type(**request_init) + + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.list_notification_configs(request) + + +def test_list_notification_configs_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = securitycenter_service.ListNotificationConfigsResponse() + + # get arguments that satisfy an http rule for this method + sample_request = {"parent": "organizations/sample1"} + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_notification_configs(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*}/notificationConfigs" + % client.transport._host, + args[1], + ) + + +def test_list_notification_configs_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, ) - # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.list_assets(request) + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_notification_configs( + securitycenter_service.ListNotificationConfigsRequest(), + parent="parent_value", + ) -def test_list_assets_rest_pager(transport: str = "rest"): +def test_list_notification_configs_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16296,28 +21988,28 @@ def test_list_assets_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), ], next_page_token="abc", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[], + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[], next_page_token="def", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), ], next_page_token="ghi", ), - securitycenter_service.ListAssetsResponse( - list_assets_results=[ - securitycenter_service.ListAssetsResponse.ListAssetsResult(), - securitycenter_service.ListAssetsResponse.ListAssetsResult(), + securitycenter_service.ListNotificationConfigsResponse( + notification_configs=[ + notification_config.NotificationConfig(), + notification_config.NotificationConfig(), ], ), ) @@ -16326,7 +22018,8 @@ def test_list_assets_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListAssetsResponse.to_json(x) for x in response + securitycenter_service.ListNotificationConfigsResponse.to_json(x) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16336,16 +22029,15 @@ def test_list_assets_rest_pager(transport: str = "rest"): sample_request = {"parent": "organizations/sample1"} - pager = client.list_assets(request=sample_request) + pager = client.list_notification_configs(request=sample_request) results = list(pager) assert len(results) == 6 assert all( - isinstance(i, securitycenter_service.ListAssetsResponse.ListAssetsResult) - for i in results + isinstance(i, notification_config.NotificationConfig) for i in results ) - pages = list(client.list_assets(request=sample_request).pages) + pages = list(client.list_notification_configs(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16353,46 +22045,50 @@ def test_list_assets_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListFindingsRequest, + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_findings_rest(request_type): +def test_list_effective_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse( + return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( next_page_token="next_page_token_value", - total_size=1086, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb(return_value) + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_findings(request) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListFindingsPager) + assert isinstance( + response, pagers.ListEffectiveSecurityHealthAnalyticsCustomModulesPager + ) assert response.next_page_token == "next_page_token_value" - assert response.total_size == 1086 -def test_list_findings_rest_required_fields( - request_type=securitycenter_service.ListFindingsRequest, +def test_list_effective_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16412,7 +22108,9 @@ def test_list_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_findings._get_unset_required_fields(jsonified_request) + ).list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16421,17 +22119,14 @@ def test_list_findings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_findings._get_unset_required_fields(jsonified_request) + ).list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( - "compare_duration", - "field_mask", - "filter", - "order_by", "page_size", "page_token", - "read_time", ) ) jsonified_request.update(unset_fields) @@ -16447,7 +22142,9 @@ def test_list_findings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListFindingsResponse() + return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16467,7 +22164,7 @@ def test_list_findings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListFindingsResponse.pb( + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -16475,29 +22172,28 @@ def test_list_findings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_findings(request) + response = client.list_effective_security_health_analytics_custom_modules( + request + ) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_findings_rest_unset_required_fields(): +def test_list_effective_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_findings._get_unset_required_fields({}) + unset_fields = transport.list_effective_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) assert set(unset_fields) == ( set( ( - "compareDuration", - "fieldMask", - "filter", - "orderBy", "pageSize", "pageToken", - "readTime", ) ) & set(("parent",)) @@ -16505,7 +22201,9 @@ def test_list_findings_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_findings_rest_interceptors(null_interceptor): +def test_list_effective_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16518,14 +22216,16 @@ def test_list_findings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_findings" + transports.SecurityCenterRestInterceptor, + "post_list_effective_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_findings" + transports.SecurityCenterRestInterceptor, + "pre_list_effective_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListFindingsRequest.pb( - securitycenter_service.ListFindingsRequest() + pb_message = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() ) transcode.return_value = { "method": "post", @@ -16537,19 +22237,23 @@ def test_list_findings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListFindingsResponse.to_json( - securitycenter_service.ListFindingsResponse() + req.return_value._content = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() ) - request = securitycenter_service.ListFindingsRequest() + request = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListFindingsResponse() + post.return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) - client.list_findings( + client.list_effective_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -16561,8 +22265,9 @@ def test_list_findings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_findings_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListFindingsRequest +def test_list_effective_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -16570,7 +22275,7 @@ def test_list_findings_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1/sources/sample2"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16582,10 +22287,76 @@ def test_list_findings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_findings(request) + client.list_effective_security_health_analytics_custom_modules(request) -def test_list_findings_rest_pager(transport: str = "rest"): +def test_list_effective_security_health_analytics_custom_modules_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = ( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse() + ) + + # get arguments that satisfy an http rule for this method + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } + + # get truthy value for each flattened field + mock_args = dict( + parent="parent_value", + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.list_effective_security_health_analytics_custom_modules(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/effectiveCustomModules" + % client.transport._host, + args[1], + ) + + +def test_list_effective_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.list_effective_security_health_analytics_custom_modules( + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesRequest(), + parent="parent_value", + ) + + +def test_list_effective_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16597,28 +22368,28 @@ def test_list_findings_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[], + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListFindingsResponse( - list_findings_results=[ - securitycenter_service.ListFindingsResponse.ListFindingsResult(), - securitycenter_service.ListFindingsResponse.ListFindingsResult(), + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse( + effective_security_health_analytics_custom_modules=[ + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule(), ], ), ) @@ -16627,7 +22398,10 @@ def test_list_findings_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListFindingsResponse.to_json(x) for x in response + securitycenter_service.ListEffectiveSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16635,20 +22409,29 @@ def test_list_findings_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1/sources/sample2"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } - pager = client.list_findings(request=sample_request) + pager = client.list_effective_security_health_analytics_custom_modules( + request=sample_request + ) results = list(pager) assert len(results) == 6 assert all( isinstance( - i, securitycenter_service.ListFindingsResponse.ListFindingsResult + i, + effective_security_health_analytics_custom_module.EffectiveSecurityHealthAnalyticsCustomModule, ) for i in results ) - pages = list(client.list_findings(request=sample_request).pages) + pages = list( + client.list_effective_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -16656,46 +22439,50 @@ def test_list_findings_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListMuteConfigsRequest, + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, dict, ], ) -def test_list_mute_configs_rest(request_type): +def test_list_security_health_analytics_custom_modules_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse( - next_page_token="next_page_token_value", + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + next_page_token="next_page_token_value", + ) ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( - return_value + pb_return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_mute_configs(request) + response = client.list_security_health_analytics_custom_modules(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListMuteConfigsPager) + assert isinstance(response, pagers.ListSecurityHealthAnalyticsCustomModulesPager) assert response.next_page_token == "next_page_token_value" -def test_list_mute_configs_rest_required_fields( - request_type=securitycenter_service.ListMuteConfigsRequest, +def test_list_security_health_analytics_custom_modules_rest_required_fields( + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -16715,7 +22502,9 @@ def test_list_mute_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_mute_configs._get_unset_required_fields(jsonified_request) + ).list_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -16724,7 +22513,9 @@ def test_list_mute_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_mute_configs._get_unset_required_fields(jsonified_request) + ).list_security_health_analytics_custom_modules._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -16745,7 +22536,9 @@ def test_list_mute_configs_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -16765,7 +22558,7 @@ def test_list_mute_configs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( + pb_return_value = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -16773,19 +22566,21 @@ def test_list_mute_configs_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_mute_configs(request) + response = client.list_security_health_analytics_custom_modules(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_mute_configs_rest_unset_required_fields(): +def test_list_security_health_analytics_custom_modules_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_mute_configs._get_unset_required_fields({}) + unset_fields = transport.list_security_health_analytics_custom_modules._get_unset_required_fields( + {} + ) assert set(unset_fields) == ( set( ( @@ -16798,7 +22593,9 @@ def test_list_mute_configs_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_mute_configs_rest_interceptors(null_interceptor): +def test_list_security_health_analytics_custom_modules_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -16811,14 +22608,18 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_mute_configs" + transports.SecurityCenterRestInterceptor, + "post_list_security_health_analytics_custom_modules", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_mute_configs" + transports.SecurityCenterRestInterceptor, + "pre_list_security_health_analytics_custom_modules", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListMuteConfigsRequest.pb( - securitycenter_service.ListMuteConfigsRequest() + pb_message = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest.pb( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) ) transcode.return_value = { "method": "post", @@ -16830,21 +22631,23 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - securitycenter_service.ListMuteConfigsResponse.to_json( - securitycenter_service.ListMuteConfigsResponse() - ) + req.return_value._content = securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() ) - request = securitycenter_service.ListMuteConfigsRequest() + request = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListMuteConfigsResponse() + post.return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) - client.list_mute_configs( + client.list_security_health_analytics_custom_modules( request, metadata=[ ("key", "val"), @@ -16856,8 +22659,9 @@ def test_list_mute_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_mute_configs_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListMuteConfigsRequest +def test_list_security_health_analytics_custom_modules_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -16865,7 +22669,7 @@ def test_list_mute_configs_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"parent": "organizations/sample1/securityHealthAnalyticsSettings"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -16877,10 +22681,10 @@ def test_list_mute_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_mute_configs(request) + client.list_security_health_analytics_custom_modules(request) -def test_list_mute_configs_rest_flattened(): +def test_list_security_health_analytics_custom_modules_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -16889,10 +22693,14 @@ def test_list_mute_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListMuteConfigsResponse() + return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse() + ) # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } # get truthy value for each flattened field mock_args = dict( @@ -16903,26 +22711,31 @@ def test_list_mute_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListMuteConfigsResponse.pb( - return_value + pb_return_value = ( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.pb( + return_value + ) ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_mute_configs(**mock_args) + client.list_security_health_analytics_custom_modules(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/muteConfigs" % client.transport._host, + "%s/v1/{parent=organizations/*/securityHealthAnalyticsSettings}/customModules" + % client.transport._host, args[1], ) -def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): +def test_list_security_health_analytics_custom_modules_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16931,13 +22744,15 @@ def test_list_mute_configs_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_mute_configs( - securitycenter_service.ListMuteConfigsRequest(), + client.list_security_health_analytics_custom_modules( + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesRequest(), parent="parent_value", ) -def test_list_mute_configs_rest_pager(transport: str = "rest"): +def test_list_security_health_analytics_custom_modules_rest_pager( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -16949,28 +22764,28 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="abc", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[], + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[], next_page_token="def", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], next_page_token="ghi", ), - securitycenter_service.ListMuteConfigsResponse( - mute_configs=[ - mute_config.MuteConfig(), - mute_config.MuteConfig(), + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse( + security_health_analytics_custom_modules=[ + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule(), ], ), ) @@ -16979,7 +22794,10 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListMuteConfigsResponse.to_json(x) for x in response + securitycenter_service.ListSecurityHealthAnalyticsCustomModulesResponse.to_json( + x + ) + for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -16987,15 +22805,29 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): return_val.status_code = 200 req.side_effect = return_values - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "parent": "organizations/sample1/securityHealthAnalyticsSettings" + } - pager = client.list_mute_configs(request=sample_request) + pager = client.list_security_health_analytics_custom_modules( + request=sample_request + ) results = list(pager) assert len(results) == 6 - assert all(isinstance(i, mute_config.MuteConfig) for i in results) + assert all( + isinstance( + i, + security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) + for i in results + ) - pages = list(client.list_mute_configs(request=sample_request).pages) + pages = list( + client.list_security_health_analytics_custom_modules( + request=sample_request + ).pages + ) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -17003,11 +22835,11 @@ def test_list_mute_configs_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListNotificationConfigsRequest, + securitycenter_service.ListSourcesRequest, dict, ], ) -def test_list_notification_configs_rest(request_type): +def test_list_sources_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17020,29 +22852,27 @@ def test_list_notification_configs_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse( + return_value = securitycenter_service.ListSourcesResponse( next_page_token="next_page_token_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( - return_value - ) + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_notification_configs(request) + response = client.list_sources(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListNotificationConfigsPager) + assert isinstance(response, pagers.ListSourcesPager) assert response.next_page_token == "next_page_token_value" -def test_list_notification_configs_rest_required_fields( - request_type=securitycenter_service.ListNotificationConfigsRequest, +def test_list_sources_rest_required_fields( + request_type=securitycenter_service.ListSourcesRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -17062,7 +22892,7 @@ def test_list_notification_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_notification_configs._get_unset_required_fields(jsonified_request) + ).list_sources._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -17071,7 +22901,7 @@ def test_list_notification_configs_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_notification_configs._get_unset_required_fields(jsonified_request) + ).list_sources._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set( ( @@ -17092,7 +22922,7 @@ def test_list_notification_configs_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() + return_value = securitycenter_service.ListSourcesResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17112,7 +22942,7 @@ def test_list_notification_configs_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( + pb_return_value = securitycenter_service.ListSourcesResponse.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -17120,19 +22950,19 @@ def test_list_notification_configs_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_notification_configs(request) + response = client.list_sources(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_notification_configs_rest_unset_required_fields(): +def test_list_sources_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_notification_configs._get_unset_required_fields({}) + unset_fields = transport.list_sources._get_unset_required_fields({}) assert set(unset_fields) == ( set( ( @@ -17145,7 +22975,7 @@ def test_list_notification_configs_rest_unset_required_fields(): @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_notification_configs_rest_interceptors(null_interceptor): +def test_list_sources_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17158,14 +22988,14 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_notification_configs" + transports.SecurityCenterRestInterceptor, "post_list_sources" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_notification_configs" + transports.SecurityCenterRestInterceptor, "pre_list_sources" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListNotificationConfigsRequest.pb( - securitycenter_service.ListNotificationConfigsRequest() + pb_message = securitycenter_service.ListSourcesRequest.pb( + securitycenter_service.ListSourcesRequest() ) transcode.return_value = { "method": "post", @@ -17177,21 +23007,19 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - securitycenter_service.ListNotificationConfigsResponse.to_json( - securitycenter_service.ListNotificationConfigsResponse() - ) + req.return_value._content = securitycenter_service.ListSourcesResponse.to_json( + securitycenter_service.ListSourcesResponse() ) - request = securitycenter_service.ListNotificationConfigsRequest() + request = securitycenter_service.ListSourcesRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListNotificationConfigsResponse() + post.return_value = securitycenter_service.ListSourcesResponse() - client.list_notification_configs( + client.list_sources( request, metadata=[ ("key", "val"), @@ -17203,9 +23031,8 @@ def test_list_notification_configs_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_notification_configs_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.ListNotificationConfigsRequest, +def test_list_sources_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.ListSourcesRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17225,10 +23052,10 @@ def test_list_notification_configs_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_notification_configs(request) + client.list_sources(request) -def test_list_notification_configs_rest_flattened(): +def test_list_sources_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17237,7 +23064,7 @@ def test_list_notification_configs_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListNotificationConfigsResponse() + return_value = securitycenter_service.ListSourcesResponse() # get arguments that satisfy an http rule for this method sample_request = {"parent": "organizations/sample1"} @@ -17251,27 +23078,23 @@ def test_list_notification_configs_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListNotificationConfigsResponse.pb( - return_value - ) + pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_notification_configs(**mock_args) + client.list_sources(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/notificationConfigs" - % client.transport._host, - args[1], + "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] ) -def test_list_notification_configs_rest_flattened_error(transport: str = "rest"): +def test_list_sources_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17280,13 +23103,13 @@ def test_list_notification_configs_rest_flattened_error(transport: str = "rest") # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_notification_configs( - securitycenter_service.ListNotificationConfigsRequest(), + client.list_sources( + securitycenter_service.ListSourcesRequest(), parent="parent_value", ) -def test_list_notification_configs_rest_pager(transport: str = "rest"): +def test_list_sources_rest_pager(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17298,28 +23121,28 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): # with mock.patch.object(path_template, 'transcode') as transcode: # Set the response as a series of pages response = ( - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), + source.Source(), ], next_page_token="abc", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[], + securitycenter_service.ListSourcesResponse( + sources=[], next_page_token="def", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), ], next_page_token="ghi", ), - securitycenter_service.ListNotificationConfigsResponse( - notification_configs=[ - notification_config.NotificationConfig(), - notification_config.NotificationConfig(), + securitycenter_service.ListSourcesResponse( + sources=[ + source.Source(), + source.Source(), ], ), ) @@ -17328,8 +23151,7 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): # Wrap the values into proper Response objs response = tuple( - securitycenter_service.ListNotificationConfigsResponse.to_json(x) - for x in response + securitycenter_service.ListSourcesResponse.to_json(x) for x in response ) return_values = tuple(Response() for i in response) for return_val, response_val in zip(return_values, response): @@ -17339,15 +23161,13 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): sample_request = {"parent": "organizations/sample1"} - pager = client.list_notification_configs(request=sample_request) + pager = client.list_sources(request=sample_request) results = list(pager) assert len(results) == 6 - assert all( - isinstance(i, notification_config.NotificationConfig) for i in results - ) + assert all(isinstance(i, source.Source) for i in results) - pages = list(client.list_notification_configs(request=sample_request).pages) + pages = list(client.list_sources(request=sample_request).pages) for page_, token in zip(pages, ["abc", "def", "ghi", ""]): assert page_.raw_page.next_page_token == token @@ -17355,11 +23175,11 @@ def test_list_notification_configs_rest_pager(transport: str = "rest"): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.ListSourcesRequest, + securitycenter_service.RunAssetDiscoveryRequest, dict, ], ) -def test_list_sources_rest(request_type): +def test_run_asset_discovery_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17372,27 +23192,23 @@ def test_list_sources_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse( - next_page_token="next_page_token_value", - ) + return_value = operations_pb2.Operation(name="operations/spam") # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_sources(request) + response = client.run_asset_discovery(request) # Establish that the response is the type that we expect. - assert isinstance(response, pagers.ListSourcesPager) - assert response.next_page_token == "next_page_token_value" + assert response.operation.name == "operations/spam" -def test_list_sources_rest_required_fields( - request_type=securitycenter_service.ListSourcesRequest, +def test_run_asset_discovery_rest_required_fields( + request_type=securitycenter_service.RunAssetDiscoveryRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -17412,7 +23228,7 @@ def test_list_sources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_sources._get_unset_required_fields(jsonified_request) + ).run_asset_discovery._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -17421,14 +23237,7 @@ def test_list_sources_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).list_sources._get_unset_required_fields(jsonified_request) - # Check that path parameters and body parameters are not mixing in. - assert not set(unset_fields) - set( - ( - "page_size", - "page_token", - ) - ) + ).run_asset_discovery._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -17442,7 +23251,7 @@ def test_list_sources_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() + return_value = operations_pb2.Operation(name="operations/spam") # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17454,48 +23263,37 @@ def test_list_sources_rest_required_fields( pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "get", + "method": "post", "query_params": pb_request, } + transcode_result["body"] = pb_request transcode.return_value = transcode_result response_value = Response() response_value.status_code = 200 - - pb_return_value = securitycenter_service.ListSourcesResponse.pb( - return_value - ) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.list_sources(request) + response = client.run_asset_discovery(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_list_sources_rest_unset_required_fields(): +def test_run_asset_discovery_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.list_sources._get_unset_required_fields({}) - assert set(unset_fields) == ( - set( - ( - "pageSize", - "pageToken", - ) - ) - & set(("parent",)) - ) + unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) + assert set(unset_fields) == (set(()) & set(("parent",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_list_sources_rest_interceptors(null_interceptor): +def test_run_asset_discovery_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17508,14 +23306,16 @@ def test_list_sources_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_list_sources" + operation.Operation, "_set_result_from_operation" + ), mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_run_asset_discovery" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_list_sources" + transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.ListSourcesRequest.pb( - securitycenter_service.ListSourcesRequest() + pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb( + securitycenter_service.RunAssetDiscoveryRequest() ) transcode.return_value = { "method": "post", @@ -17527,19 +23327,19 @@ def test_list_sources_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = securitycenter_service.ListSourcesResponse.to_json( - securitycenter_service.ListSourcesResponse() + req.return_value._content = json_format.MessageToJson( + operations_pb2.Operation() ) - request = securitycenter_service.ListSourcesRequest() + request = securitycenter_service.RunAssetDiscoveryRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = securitycenter_service.ListSourcesResponse() + post.return_value = operations_pb2.Operation() - client.list_sources( + client.run_asset_discovery( request, metadata=[ ("key", "val"), @@ -17551,8 +23351,9 @@ def test_list_sources_rest_interceptors(null_interceptor): post.assert_called_once() -def test_list_sources_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.ListSourcesRequest +def test_run_asset_discovery_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.RunAssetDiscoveryRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17572,10 +23373,10 @@ def test_list_sources_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.list_sources(request) + client.run_asset_discovery(request) -def test_list_sources_rest_flattened(): +def test_run_asset_discovery_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17584,7 +23385,7 @@ def test_list_sources_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = securitycenter_service.ListSourcesResponse() + return_value = operations_pb2.Operation(name="operations/spam") # get arguments that satisfy an http rule for this method sample_request = {"parent": "organizations/sample1"} @@ -17598,23 +23399,24 @@ def test_list_sources_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = securitycenter_service.ListSourcesResponse.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) + json_return_value = json_format.MessageToJson(return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.list_sources(**mock_args) + client.run_asset_discovery(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/sources" % client.transport._host, args[1] + "%s/v1/{parent=organizations/*}/assets:runDiscovery" + % client.transport._host, + args[1], ) -def test_list_sources_rest_flattened_error(transport: str = "rest"): +def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17623,117 +23425,92 @@ def test_list_sources_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.list_sources( - securitycenter_service.ListSourcesRequest(), + client.run_asset_discovery( + securitycenter_service.RunAssetDiscoveryRequest(), parent="parent_value", ) -def test_list_sources_rest_pager(transport: str = "rest"): +def test_run_asset_discovery_rest_error(): client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) - # Mock the http request call within the method and fake a response. - with mock.patch.object(Session, "request") as req: - # TODO(kbandes): remove this mock unless there's a good reason for it. - # with mock.patch.object(path_template, 'transcode') as transcode: - # Set the response as a series of pages - response = ( - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - source.Source(), - ], - next_page_token="abc", - ), - securitycenter_service.ListSourcesResponse( - sources=[], - next_page_token="def", - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - ], - next_page_token="ghi", - ), - securitycenter_service.ListSourcesResponse( - sources=[ - source.Source(), - source.Source(), - ], - ), - ) - # Two responses for two calls - response = response + response - - # Wrap the values into proper Response objs - response = tuple( - securitycenter_service.ListSourcesResponse.to_json(x) for x in response - ) - return_values = tuple(Response() for i in response) - for return_val, response_val in zip(return_values, response): - return_val._content = response_val.encode("UTF-8") - return_val.status_code = 200 - req.side_effect = return_values - - sample_request = {"parent": "organizations/sample1"} - - pager = client.list_sources(request=sample_request) - - results = list(pager) - assert len(results) == 6 - assert all(isinstance(i, source.Source) for i in results) - - pages = list(client.list_sources(request=sample_request).pages) - for page_, token in zip(pages, ["abc", "def", "ghi", ""]): - assert page_.raw_page.next_page_token == token - @pytest.mark.parametrize( "request_type", [ - securitycenter_service.RunAssetDiscoveryRequest, + securitycenter_service.SetFindingStateRequest, dict, ], ) -def test_run_asset_discovery_rest(request_type): +def test_set_finding_state_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding( + name="name_value", + parent="parent_value", + resource_name="resource_name_value", + state=finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=finding.Finding.Mute.MUTED, + finding_class=finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", + ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.run_asset_discovery(request) + response = client.set_finding_state(request) # Establish that the response is the type that we expect. - assert response.operation.name == "operations/spam" + assert isinstance(response, finding.Finding) + assert response.name == "name_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == finding.Finding.Mute.MUTED + assert response.finding_class == finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_run_asset_discovery_rest_required_fields( - request_type=securitycenter_service.RunAssetDiscoveryRequest, +def test_set_finding_state_rest_required_fields( + request_type=securitycenter_service.SetFindingStateRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["parent"] = "" + request_init["name"] = "" request = request_type(**request_init) pb_request = request_type.pb(request) jsonified_request = json.loads( @@ -17748,21 +23525,21 @@ def test_run_asset_discovery_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).run_asset_discovery._get_unset_required_fields(jsonified_request) + ).set_finding_state._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["parent"] = "parent_value" + jsonified_request["name"] = "name_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).run_asset_discovery._get_unset_required_fields(jsonified_request) + ).set_finding_state._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "parent" in jsonified_request - assert jsonified_request["parent"] == "parent_value" + assert "name" in jsonified_request + assert jsonified_request["name"] == "name_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17771,7 +23548,7 @@ def test_run_asset_discovery_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -17791,29 +23568,40 @@ def test_run_asset_discovery_rest_required_fields( response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.run_asset_discovery(request) + response = client.set_finding_state(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_run_asset_discovery_rest_unset_required_fields(): +def test_set_finding_state_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.run_asset_discovery._get_unset_required_fields({}) - assert set(unset_fields) == (set(()) & set(("parent",))) + unset_fields = transport.set_finding_state._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "name", + "state", + "startTime", + ) + ) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_run_asset_discovery_rest_interceptors(null_interceptor): +def test_set_finding_state_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -17826,16 +23614,14 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - operation.Operation, "_set_result_from_operation" - ), mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_run_asset_discovery" + transports.SecurityCenterRestInterceptor, "post_set_finding_state" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_run_asset_discovery" + transports.SecurityCenterRestInterceptor, "pre_set_finding_state" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.RunAssetDiscoveryRequest.pb( - securitycenter_service.RunAssetDiscoveryRequest() + pb_message = securitycenter_service.SetFindingStateRequest.pb( + securitycenter_service.SetFindingStateRequest() ) transcode.return_value = { "method": "post", @@ -17847,19 +23633,17 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - operations_pb2.Operation() - ) + req.return_value._content = finding.Finding.to_json(finding.Finding()) - request = securitycenter_service.RunAssetDiscoveryRequest() + request = securitycenter_service.SetFindingStateRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = operations_pb2.Operation() + post.return_value = finding.Finding() - client.run_asset_discovery( + client.set_finding_state( request, metadata=[ ("key", "val"), @@ -17871,9 +23655,8 @@ def test_run_asset_discovery_rest_interceptors(null_interceptor): post.assert_called_once() -def test_run_asset_discovery_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.RunAssetDiscoveryRequest, +def test_set_finding_state_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.SetFindingStateRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -17881,7 +23664,7 @@ def test_run_asset_discovery_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"parent": "organizations/sample1"} + request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -17893,10 +23676,10 @@ def test_run_asset_discovery_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.run_asset_discovery(request) + client.set_finding_state(request) -def test_run_asset_discovery_rest_flattened(): +def test_set_finding_state_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17905,38 +23688,43 @@ def test_run_asset_discovery_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = operations_pb2.Operation(name="operations/spam") + return_value = finding.Finding() # get arguments that satisfy an http rule for this method - sample_request = {"parent": "organizations/sample1"} + sample_request = { + "name": "organizations/sample1/sources/sample2/findings/sample3" + } # get truthy value for each flattened field mock_args = dict( - parent="parent_value", + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - json_return_value = json_format.MessageToJson(return_value) + pb_return_value = finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.run_asset_discovery(**mock_args) + client.set_finding_state(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{parent=organizations/*}/assets:runDiscovery" + "%s/v1/{name=organizations/*/sources/*/findings/*}:setState" % client.transport._host, args[1], ) -def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): +def test_set_finding_state_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -17945,13 +23733,15 @@ def test_run_asset_discovery_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.run_asset_discovery( - securitycenter_service.RunAssetDiscoveryRequest(), - parent="parent_value", + client.set_finding_state( + securitycenter_service.SetFindingStateRequest(), + name="name_value", + state=finding.Finding.State.ACTIVE, + start_time=timestamp_pb2.Timestamp(seconds=751), ) -def test_run_asset_discovery_rest_error(): +def test_set_finding_state_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -17960,11 +23750,11 @@ def test_run_asset_discovery_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.SetFindingStateRequest, + securitycenter_service.SetMuteRequest, dict, ], ) -def test_set_finding_state_rest(request_type): +def test_set_mute_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -17992,6 +23782,7 @@ def test_set_finding_state_rest(request_type): parent_display_name="parent_display_name_value", description="description_value", next_steps="next_steps_value", + module_name="module_name_value", ) # Wrap the value into a proper Response obj @@ -18002,7 +23793,7 @@ def test_set_finding_state_rest(request_type): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_finding_state(request) + response = client.set_mute(request) # Establish that the response is the type that we expect. assert isinstance(response, finding.Finding) @@ -18020,10 +23811,11 @@ def test_set_finding_state_rest(request_type): assert response.parent_display_name == "parent_display_name_value" assert response.description == "description_value" assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_set_finding_state_rest_required_fields( - request_type=securitycenter_service.SetFindingStateRequest, +def test_set_mute_rest_required_fields( + request_type=securitycenter_service.SetMuteRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -18043,7 +23835,7 @@ def test_set_finding_state_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_finding_state._get_unset_required_fields(jsonified_request) + ).set_mute._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present @@ -18052,7 +23844,7 @@ def test_set_finding_state_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_finding_state._get_unset_required_fields(jsonified_request) + ).set_mute._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone @@ -18093,33 +23885,32 @@ def test_set_finding_state_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_finding_state(request) + response = client.set_mute(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_finding_state_rest_unset_required_fields(): +def test_set_mute_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_finding_state._get_unset_required_fields({}) + unset_fields = transport.set_mute._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( "name", - "state", - "startTime", + "mute", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_finding_state_rest_interceptors(null_interceptor): +def test_set_mute_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18132,14 +23923,14 @@ def test_set_finding_state_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_finding_state" + transports.SecurityCenterRestInterceptor, "post_set_mute" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_finding_state" + transports.SecurityCenterRestInterceptor, "pre_set_mute" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.SetFindingStateRequest.pb( - securitycenter_service.SetFindingStateRequest() + pb_message = securitycenter_service.SetMuteRequest.pb( + securitycenter_service.SetMuteRequest() ) transcode.return_value = { "method": "post", @@ -18153,7 +23944,7 @@ def test_set_finding_state_rest_interceptors(null_interceptor): req.return_value.request = PreparedRequest() req.return_value._content = finding.Finding.to_json(finding.Finding()) - request = securitycenter_service.SetFindingStateRequest() + request = securitycenter_service.SetMuteRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), @@ -18161,7 +23952,7 @@ def test_set_finding_state_rest_interceptors(null_interceptor): pre.return_value = request, metadata post.return_value = finding.Finding() - client.set_finding_state( + client.set_mute( request, metadata=[ ("key", "val"), @@ -18173,8 +23964,8 @@ def test_set_finding_state_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_finding_state_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.SetFindingStateRequest +def test_set_mute_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.SetMuteRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18194,10 +23985,10 @@ def test_set_finding_state_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_finding_state(request) + client.set_mute(request) -def test_set_finding_state_rest_flattened(): +def test_set_mute_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18216,8 +24007,7 @@ def test_set_finding_state_rest_flattened(): # get truthy value for each flattened field mock_args = dict( name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + mute=finding.Finding.Mute.MUTED, ) mock_args.update(sample_request) @@ -18229,20 +24019,20 @@ def test_set_finding_state_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_finding_state(**mock_args) + client.set_mute(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*/findings/*}:setState" + "%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" % client.transport._host, args[1], ) -def test_set_finding_state_rest_flattened_error(transport: str = "rest"): +def test_set_mute_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18251,15 +24041,14 @@ def test_set_finding_state_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_finding_state( - securitycenter_service.SetFindingStateRequest(), + client.set_mute( + securitycenter_service.SetMuteRequest(), name="name_value", - state=finding.Finding.State.ACTIVE, - start_time=timestamp_pb2.Timestamp(seconds=751), + mute=finding.Finding.Mute.MUTED, ) -def test_set_finding_state_rest_error(): +def test_set_mute_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18268,77 +24057,53 @@ def test_set_finding_state_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.SetMuteRequest, + iam_policy_pb2.SetIamPolicyRequest, dict, ], ) -def test_set_mute_rest(request_type): +def test_set_iam_policy_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = finding.Finding( - name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=finding.Finding.Mute.MUTED, - finding_class=finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", - description="description_value", - next_steps="next_steps_value", + return_value = policy_pb2.Policy( + version=774, + etag=b"etag_blob", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_mute(request) + response = client.set_iam_policy(request) # Establish that the response is the type that we expect. - assert isinstance(response, finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == finding.Finding.Mute.MUTED - assert response.finding_class == finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" - assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert isinstance(response, policy_pb2.Policy) + assert response.version == 774 + assert response.etag == b"etag_blob" -def test_set_mute_rest_required_fields( - request_type=securitycenter_service.SetMuteRequest, +def test_set_iam_policy_rest_required_fields( + request_type=iam_policy_pb2.SetIamPolicyRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["name"] = "" + request_init["resource"] = "" request = request_type(**request_init) - pb_request = request_type.pb(request) + pb_request = request jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -18351,21 +24116,21 @@ def test_set_mute_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_mute._get_unset_required_fields(jsonified_request) + ).set_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["name"] = "name_value" + jsonified_request["resource"] = "resource_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_mute._get_unset_required_fields(jsonified_request) + ).set_iam_policy._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "name" in jsonified_request - assert jsonified_request["name"] == "name_value" + assert "resource" in jsonified_request + assert jsonified_request["resource"] == "resource_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18374,7 +24139,7 @@ def test_set_mute_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = finding.Finding() + return_value = policy_pb2.Policy() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18383,7 +24148,7 @@ def test_set_mute_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request_type.pb(request) + pb_request = request transcode_result = { "uri": "v1/sample_method", "method": "post", @@ -18395,38 +24160,38 @@ def test_set_mute_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_mute(request) + response = client.set_iam_policy(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_mute_rest_unset_required_fields(): +def test_set_iam_policy_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_mute._get_unset_required_fields({}) + unset_fields = transport.set_iam_policy._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( - "name", - "mute", + "resource", + "policy", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_mute_rest_interceptors(null_interceptor): +def test_set_iam_policy_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18439,15 +24204,13 @@ def test_set_mute_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_mute" + transports.SecurityCenterRestInterceptor, "post_set_iam_policy" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_mute" + transports.SecurityCenterRestInterceptor, "pre_set_iam_policy" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.SetMuteRequest.pb( - securitycenter_service.SetMuteRequest() - ) + pb_message = iam_policy_pb2.SetIamPolicyRequest() transcode.return_value = { "method": "post", "uri": "my_uri", @@ -18458,17 +24221,17 @@ def test_set_mute_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = finding.Finding.to_json(finding.Finding()) + req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) - request = securitycenter_service.SetMuteRequest() + request = iam_policy_pb2.SetIamPolicyRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = finding.Finding() + post.return_value = policy_pb2.Policy() - client.set_mute( + client.set_iam_policy( request, metadata=[ ("key", "val"), @@ -18480,8 +24243,8 @@ def test_set_mute_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_mute_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.SetMuteRequest +def test_set_iam_policy_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.SetIamPolicyRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18489,7 +24252,7 @@ def test_set_mute_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"name": "organizations/sample1/sources/sample2/findings/sample3"} + request_init = {"resource": "organizations/sample1/sources/sample2"} request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -18501,10 +24264,10 @@ def test_set_mute_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_mute(request) + client.set_iam_policy(request) -def test_set_mute_rest_flattened(): +def test_set_iam_policy_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18513,42 +24276,39 @@ def test_set_mute_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = finding.Finding() + return_value = policy_pb2.Policy() # get arguments that satisfy an http rule for this method - sample_request = { - "name": "organizations/sample1/sources/sample2/findings/sample3" - } + sample_request = {"resource": "organizations/sample1/sources/sample2"} # get truthy value for each flattened field mock_args = dict( - name="name_value", - mute=finding.Finding.Mute.MUTED, + resource="resource_value", ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = finding.Finding.pb(return_value) + pb_return_value = return_value json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_mute(**mock_args) + client.set_iam_policy(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{name=organizations/*/sources/*/findings/*}:setMute" + "%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" % client.transport._host, args[1], ) -def test_set_mute_rest_flattened_error(transport: str = "rest"): +def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18557,14 +24317,13 @@ def test_set_mute_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_mute( - securitycenter_service.SetMuteRequest(), - name="name_value", - mute=finding.Finding.Mute.MUTED, + client.set_iam_policy( + iam_policy_pb2.SetIamPolicyRequest(), + resource="resource_value", ) -def test_set_mute_rest_error(): +def test_set_iam_policy_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18573,11 +24332,11 @@ def test_set_mute_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.SetIamPolicyRequest, + iam_policy_pb2.TestIamPermissionsRequest, dict, ], ) -def test_set_iam_policy_rest(request_type): +def test_test_iam_permissions_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18590,9 +24349,8 @@ def test_set_iam_policy_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy( - version=774, - etag=b"etag_blob", + return_value = iam_policy_pb2.TestIamPermissionsResponse( + permissions=["permissions_value"], ) # Wrap the value into a proper Response obj @@ -18603,21 +24361,21 @@ def test_set_iam_policy_rest(request_type): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) # Establish that the response is the type that we expect. - assert isinstance(response, policy_pb2.Policy) - assert response.version == 774 - assert response.etag == b"etag_blob" + assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) + assert response.permissions == ["permissions_value"] -def test_set_iam_policy_rest_required_fields( - request_type=iam_policy_pb2.SetIamPolicyRequest, +def test_test_iam_permissions_rest_required_fields( + request_type=iam_policy_pb2.TestIamPermissionsRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} request_init["resource"] = "" + request_init["permissions"] = "" request = request_type(**request_init) pb_request = request jsonified_request = json.loads( @@ -18632,21 +24390,24 @@ def test_set_iam_policy_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present jsonified_request["resource"] = "resource_value" + jsonified_request["permissions"] = "permissions_value" unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).set_iam_policy._get_unset_required_fields(jsonified_request) + ).test_iam_permissions._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone assert "resource" in jsonified_request assert jsonified_request["resource"] == "resource_value" + assert "permissions" in jsonified_request + assert jsonified_request["permissions"] == "permissions_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18655,7 +24416,7 @@ def test_set_iam_policy_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = iam_policy_pb2.TestIamPermissionsResponse() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18682,32 +24443,32 @@ def test_set_iam_policy_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.set_iam_policy(request) + response = client.test_iam_permissions(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_set_iam_policy_rest_unset_required_fields(): +def test_test_iam_permissions_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.set_iam_policy._get_unset_required_fields({}) + unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) assert set(unset_fields) == ( set(()) & set( ( "resource", - "policy", + "permissions", ) ) ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_set_iam_policy_rest_interceptors(null_interceptor): +def test_test_iam_permissions_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18720,13 +24481,13 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_set_iam_policy" + transports.SecurityCenterRestInterceptor, "post_test_iam_permissions" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_set_iam_policy" + transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.SetIamPolicyRequest() + pb_message = iam_policy_pb2.TestIamPermissionsRequest() transcode.return_value = { "method": "post", "uri": "my_uri", @@ -18737,17 +24498,19 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson(policy_pb2.Policy()) + req.return_value._content = json_format.MessageToJson( + iam_policy_pb2.TestIamPermissionsResponse() + ) - request = iam_policy_pb2.SetIamPolicyRequest() + request = iam_policy_pb2.TestIamPermissionsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = policy_pb2.Policy() + post.return_value = iam_policy_pb2.TestIamPermissionsResponse() - client.set_iam_policy( + client.test_iam_permissions( request, metadata=[ ("key", "val"), @@ -18759,8 +24522,8 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): post.assert_called_once() -def test_set_iam_policy_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.SetIamPolicyRequest +def test_test_iam_permissions_rest_bad_request( + transport: str = "rest", request_type=iam_policy_pb2.TestIamPermissionsRequest ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18780,10 +24543,10 @@ def test_set_iam_policy_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.set_iam_policy(request) + client.test_iam_permissions(request) -def test_set_iam_policy_rest_flattened(): +def test_test_iam_permissions_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -18792,7 +24555,7 @@ def test_set_iam_policy_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = policy_pb2.Policy() + return_value = iam_policy_pb2.TestIamPermissionsResponse() # get arguments that satisfy an http rule for this method sample_request = {"resource": "organizations/sample1/sources/sample2"} @@ -18800,6 +24563,7 @@ def test_set_iam_policy_rest_flattened(): # get truthy value for each flattened field mock_args = dict( resource="resource_value", + permissions=["permissions_value"], ) mock_args.update(sample_request) @@ -18811,20 +24575,20 @@ def test_set_iam_policy_rest_flattened(): response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.set_iam_policy(**mock_args) + client.test_iam_permissions(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:setIamPolicy" + "%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" % client.transport._host, args[1], ) -def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): +def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -18833,13 +24597,14 @@ def test_set_iam_policy_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.set_iam_policy( - iam_policy_pb2.SetIamPolicyRequest(), + client.test_iam_permissions( + iam_policy_pb2.TestIamPermissionsRequest(), resource="resource_value", + permissions=["permissions_value"], ) -def test_set_iam_policy_rest_error(): +def test_test_iam_permissions_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -18848,52 +24613,67 @@ def test_set_iam_policy_rest_error(): @pytest.mark.parametrize( "request_type", [ - iam_policy_pb2.TestIamPermissionsRequest, + securitycenter_service.UpdateExternalSystemRequest, dict, ], ) -def test_test_iam_permissions_rest(request_type): +def test_update_external_system_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } + request_init["external_system"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", + "assignees": ["assignees_value1", "assignees_value2"], + "external_uid": "external_uid_value", + "status": "status_value", + "external_system_update_time": {"seconds": 751, "nanos": 543}, + } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse( - permissions=["permissions_value"], + return_value = gcs_external_system.ExternalSystem( + name="name_value", + assignees=["assignees_value"], + external_uid="external_uid_value", + status="status_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_external_system(request) # Establish that the response is the type that we expect. - assert isinstance(response, iam_policy_pb2.TestIamPermissionsResponse) - assert response.permissions == ["permissions_value"] + assert isinstance(response, gcs_external_system.ExternalSystem) + assert response.name == "name_value" + assert response.assignees == ["assignees_value"] + assert response.external_uid == "external_uid_value" + assert response.status == "status_value" -def test_test_iam_permissions_rest_required_fields( - request_type=iam_policy_pb2.TestIamPermissionsRequest, +def test_update_external_system_rest_required_fields( + request_type=securitycenter_service.UpdateExternalSystemRequest, ): transport_class = transports.SecurityCenterRestTransport request_init = {} - request_init["resource"] = "" - request_init["permissions"] = "" request = request_type(**request_init) - pb_request = request + pb_request = request_type.pb(request) jsonified_request = json.loads( json_format.MessageToJson( pb_request, @@ -18906,24 +24686,19 @@ def test_test_iam_permissions_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_external_system._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present - jsonified_request["resource"] = "resource_value" - jsonified_request["permissions"] = "permissions_value" - unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).test_iam_permissions._get_unset_required_fields(jsonified_request) + ).update_external_system._get_unset_required_fields(jsonified_request) + # Check that path parameters and body parameters are not mixing in. + assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) # verify required fields with non-default values are left alone - assert "resource" in jsonified_request - assert jsonified_request["resource"] == "resource_value" - assert "permissions" in jsonified_request - assert jsonified_request["permissions"] == "permissions_value" client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -18932,7 +24707,7 @@ def test_test_iam_permissions_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() + return_value = gcs_external_system.ExternalSystem() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -18941,10 +24716,10 @@ def test_test_iam_permissions_rest_required_fields( with mock.patch.object(path_template, "transcode") as transcode: # A uri without fields and an empty body will force all the # request fields to show up in the query_params. - pb_request = request + pb_request = request_type.pb(request) transcode_result = { "uri": "v1/sample_method", - "method": "post", + "method": "patch", "query_params": pb_request, } transcode_result["body"] = pb_request @@ -18953,38 +24728,30 @@ def test_test_iam_permissions_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.test_iam_permissions(request) + response = client.update_external_system(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_test_iam_permissions_rest_unset_required_fields(): +def test_update_external_system_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.test_iam_permissions._get_unset_required_fields({}) - assert set(unset_fields) == ( - set(()) - & set( - ( - "resource", - "permissions", - ) - ) - ) + unset_fields = transport.update_external_system._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("externalSystem",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_test_iam_permissions_rest_interceptors(null_interceptor): +def test_update_external_system_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -18997,13 +24764,15 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_test_iam_permissions" + transports.SecurityCenterRestInterceptor, "post_update_external_system" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_test_iam_permissions" + transports.SecurityCenterRestInterceptor, "pre_update_external_system" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = iam_policy_pb2.TestIamPermissionsRequest() + pb_message = securitycenter_service.UpdateExternalSystemRequest.pb( + securitycenter_service.UpdateExternalSystemRequest() + ) transcode.return_value = { "method": "post", "uri": "my_uri", @@ -19014,19 +24783,19 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = json_format.MessageToJson( - iam_policy_pb2.TestIamPermissionsResponse() + req.return_value._content = gcs_external_system.ExternalSystem.to_json( + gcs_external_system.ExternalSystem() ) - request = iam_policy_pb2.TestIamPermissionsRequest() + request = securitycenter_service.UpdateExternalSystemRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = iam_policy_pb2.TestIamPermissionsResponse() + post.return_value = gcs_external_system.ExternalSystem() - client.test_iam_permissions( + client.update_external_system( request, metadata=[ ("key", "val"), @@ -19038,8 +24807,9 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): post.assert_called_once() -def test_test_iam_permissions_rest_bad_request( - transport: str = "rest", request_type=iam_policy_pb2.TestIamPermissionsRequest +def test_update_external_system_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.UpdateExternalSystemRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -19047,7 +24817,18 @@ def test_test_iam_permissions_rest_bad_request( ) # send a request that will satisfy transcoding - request_init = {"resource": "organizations/sample1/sources/sample2"} + request_init = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } + request_init["external_system"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", + "assignees": ["assignees_value1", "assignees_value2"], + "external_uid": "external_uid_value", + "status": "status_value", + "external_system_update_time": {"seconds": 751, "nanos": 543}, + } request = request_type(**request_init) # Mock the http request call within the method and fake a BadRequest error. @@ -19059,10 +24840,10 @@ def test_test_iam_permissions_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.test_iam_permissions(request) + client.update_external_system(request) -def test_test_iam_permissions_rest_flattened(): +def test_update_external_system_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -19071,40 +24852,44 @@ def test_test_iam_permissions_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = iam_policy_pb2.TestIamPermissionsResponse() + return_value = gcs_external_system.ExternalSystem() # get arguments that satisfy an http rule for this method - sample_request = {"resource": "organizations/sample1/sources/sample2"} + sample_request = { + "external_system": { + "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" + } + } # get truthy value for each flattened field mock_args = dict( - resource="resource_value", - permissions=["permissions_value"], + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = return_value + pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.test_iam_permissions(**mock_args) + client.update_external_system(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{resource=organizations/*/sources/*}:testIamPermissions" + "%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" % client.transport._host, args[1], ) -def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): +def test_update_external_system_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -19113,14 +24898,14 @@ def test_test_iam_permissions_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.test_iam_permissions( - iam_policy_pb2.TestIamPermissionsRequest(), - resource="resource_value", - permissions=["permissions_value"], + client.update_external_system( + securitycenter_service.UpdateExternalSystemRequest(), + external_system=gcs_external_system.ExternalSystem(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_test_iam_permissions_rest_error(): +def test_update_external_system_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -19129,11 +24914,11 @@ def test_test_iam_permissions_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateExternalSystemRequest, + securitycenter_service.UpdateFindingRequest, dict, ], ) -def test_update_external_system_rest(request_type): +def test_update_finding_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -19141,49 +24926,249 @@ def test_update_external_system_rest(request_type): # send a request that will satisfy transcoding request_init = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } + "finding": {"name": "organizations/sample1/sources/sample2/findings/sample3"} } - request_init["external_system"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", - "assignees": ["assignees_value1", "assignees_value2"], - "external_uid": "external_uid_value", - "status": "status_value", - "external_system_update_time": {"seconds": 751, "nanos": 543}, + request_init["finding"] = { + "name": "organizations/sample1/sources/sample2/findings/sample3", + "parent": "parent_value", + "resource_name": "resource_name_value", + "state": 1, + "category": "category_value", + "external_uri": "external_uri_value", + "source_properties": {}, + "security_marks": { + "name": "name_value", + "marks": {}, + "canonical_name": "canonical_name_value", + }, + "event_time": {"seconds": 751, "nanos": 543}, + "create_time": {}, + "severity": 1, + "canonical_name": "canonical_name_value", + "mute": 1, + "finding_class": 1, + "indicator": { + "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], + "domains": ["domains_value1", "domains_value2"], + "signatures": [ + { + "memory_hash_signature": { + "binary_family": "binary_family_value", + "detections": [ + {"binary": "binary_value", "percent_pages_matched": 0.2197} + ], + }, + "yara_rule_signature": {"yara_rule": "yara_rule_value"}, + } + ], + "uris": ["uris_value1", "uris_value2"], + }, + "vulnerability": { + "cve": { + "id": "id_value", + "references": [{"source": "source_value", "uri": "uri_value"}], + "cvssv3": { + "base_score": 0.1046, + "attack_vector": 1, + "attack_complexity": 1, + "privileges_required": 1, + "user_interaction": 1, + "scope": 1, + "confidentiality_impact": 1, + "integrity_impact": 1, + "availability_impact": 1, + }, + "upstream_fix_available": True, + } + }, + "mute_update_time": {}, + "external_systems": {}, + "mitre_attack": { + "primary_tactic": 1, + "primary_techniques": [1], + "additional_tactics": [1], + "additional_techniques": [1], + "version": "version_value", + }, + "access": { + "principal_email": "principal_email_value", + "caller_ip": "caller_ip_value", + "caller_ip_geo": {"region_code": "region_code_value"}, + "user_agent_family": "user_agent_family_value", + "service_name": "service_name_value", + "method_name": "method_name_value", + "principal_subject": "principal_subject_value", + "service_account_key_name": "service_account_key_name_value", + "service_account_delegation_info": [ + { + "principal_email": "principal_email_value", + "principal_subject": "principal_subject_value", + } + ], + "user_name": "user_name_value", + }, + "connections": [ + { + "destination_ip": "destination_ip_value", + "destination_port": 1734, + "source_ip": "source_ip_value", + "source_port": 1205, + "protocol": 1, + } + ], + "mute_initiator": "mute_initiator_value", + "processes": [ + { + "name": "name_value", + "binary": { + "path": "path_value", + "size": 443, + "sha256": "sha256_value", + "hashed_size": 1159, + "partially_hashed": True, + "contents": "contents_value", + }, + "libraries": {}, + "script": {}, + "args": ["args_value1", "args_value2"], + "arguments_truncated": True, + "env_variables": [{"name": "name_value", "val": "val_value"}], + "env_variables_truncated": True, + "pid": 317, + "parent_pid": 1062, + } + ], + "contacts": {}, + "compliances": [ + { + "standard": "standard_value", + "version": "version_value", + "ids": ["ids_value1", "ids_value2"], + } + ], + "parent_display_name": "parent_display_name_value", + "description": "description_value", + "exfiltration": { + "sources": [ + { + "name": "name_value", + "components": ["components_value1", "components_value2"], + } + ], + "targets": {}, + }, + "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], + "next_steps": "next_steps_value", + "module_name": "module_name_value", + "containers": [ + { + "name": "name_value", + "uri": "uri_value", + "image_id": "image_id_value", + "labels": [{"name": "name_value", "value": "value_value"}], + } + ], + "kubernetes": { + "pods": [ + {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} + ], + "nodes": [{"name": "name_value"}], + "node_pools": [{"name": "name_value", "nodes": {}}], + "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + "bindings": [ + { + "ns": "ns_value", + "name": "name_value", + "role": {}, + "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], + } + ], + "access_reviews": [ + { + "group": "group_value", + "ns": "ns_value", + "name": "name_value", + "resource": "resource_value", + "subresource": "subresource_value", + "verb": "verb_value", + "version": "version_value", + } + ], + }, + "database": { + "name": "name_value", + "display_name": "display_name_value", + "user_name": "user_name_value", + "query": "query_value", + "grantees": ["grantees_value1", "grantees_value2"], + }, + "files": {}, + "kernel_rootkit": { + "name": "name_value", + "unexpected_code_modification": True, + "unexpected_read_only_data_modification": True, + "unexpected_ftrace_handler": True, + "unexpected_kprobe_handler": True, + "unexpected_kernel_code_pages": True, + "unexpected_system_call_handler": True, + "unexpected_interrupt_handler": True, + "unexpected_processes_in_runqueue": True, + }, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem( + return_value = gcs_finding.Finding( name="name_value", - assignees=["assignees_value"], - external_uid="external_uid_value", - status="status_value", + parent="parent_value", + resource_name="resource_name_value", + state=gcs_finding.Finding.State.ACTIVE, + category="category_value", + external_uri="external_uri_value", + severity=gcs_finding.Finding.Severity.CRITICAL, + canonical_name="canonical_name_value", + mute=gcs_finding.Finding.Mute.MUTED, + finding_class=gcs_finding.Finding.FindingClass.THREAT, + mute_initiator="mute_initiator_value", + parent_display_name="parent_display_name_value", + description="description_value", + next_steps="next_steps_value", + module_name="module_name_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + pb_return_value = gcs_finding.Finding.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_external_system(request) + response = client.update_finding(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_external_system.ExternalSystem) + assert isinstance(response, gcs_finding.Finding) assert response.name == "name_value" - assert response.assignees == ["assignees_value"] - assert response.external_uid == "external_uid_value" - assert response.status == "status_value" + assert response.parent == "parent_value" + assert response.resource_name == "resource_name_value" + assert response.state == gcs_finding.Finding.State.ACTIVE + assert response.category == "category_value" + assert response.external_uri == "external_uri_value" + assert response.severity == gcs_finding.Finding.Severity.CRITICAL + assert response.canonical_name == "canonical_name_value" + assert response.mute == gcs_finding.Finding.Mute.MUTED + assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT + assert response.mute_initiator == "mute_initiator_value" + assert response.parent_display_name == "parent_display_name_value" + assert response.description == "description_value" + assert response.next_steps == "next_steps_value" + assert response.module_name == "module_name_value" -def test_update_external_system_rest_required_fields( - request_type=securitycenter_service.UpdateExternalSystemRequest, +def test_update_finding_rest_required_fields( + request_type=securitycenter_service.UpdateFindingRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -19202,14 +25187,14 @@ def test_update_external_system_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_external_system._get_unset_required_fields(jsonified_request) + ).update_finding._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_external_system._get_unset_required_fields(jsonified_request) + ).update_finding._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -19223,7 +25208,7 @@ def test_update_external_system_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() + return_value = gcs_finding.Finding() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -19244,200 +25229,89 @@ def test_update_external_system_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) + pb_return_value = gcs_finding.Finding.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - - response = client.update_external_system(request) - - expected_params = [("$alt", "json;enum-encoding=int")] - actual_params = req.call_args.kwargs["params"] - assert expected_params == actual_params - - -def test_update_external_system_rest_unset_required_fields(): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials - ) - - unset_fields = transport.update_external_system._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("externalSystem",))) - - -@pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_external_system_rest_interceptors(null_interceptor): - transport = transports.SecurityCenterRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - interceptor=None - if null_interceptor - else transports.SecurityCenterRestInterceptor(), - ) - client = SecurityCenterClient(transport=transport) - with mock.patch.object( - type(client.transport._session), "request" - ) as req, mock.patch.object( - path_template, "transcode" - ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_external_system" - ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_external_system" - ) as pre: - pre.assert_not_called() - post.assert_not_called() - pb_message = securitycenter_service.UpdateExternalSystemRequest.pb( - securitycenter_service.UpdateExternalSystemRequest() - ) - transcode.return_value = { - "method": "post", - "uri": "my_uri", - "body": pb_message, - "query_params": pb_message, - } - - req.return_value = Response() - req.return_value.status_code = 200 - req.return_value.request = PreparedRequest() - req.return_value._content = gcs_external_system.ExternalSystem.to_json( - gcs_external_system.ExternalSystem() - ) - - request = securitycenter_service.UpdateExternalSystemRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_external_system.ExternalSystem() - - client.update_external_system( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_external_system_rest_bad_request( - transport: str = "rest", - request_type=securitycenter_service.UpdateExternalSystemRequest, -): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } - } - request_init["external_system"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4", - "assignees": ["assignees_value1", "assignees_value2"], - "external_uid": "external_uid_value", - "status": "status_value", - "external_system_update_time": {"seconds": 751, "nanos": 543}, - } - request = request_type(**request_init) - - # Mock the http request call within the method and fake a BadRequest error. - with mock.patch.object(Session, "request") as req, pytest.raises( - core_exceptions.BadRequest - ): - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 400 - response_value.request = Request() - req.return_value = response_value - client.update_external_system(request) - - -def test_update_external_system_rest_flattened(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport="rest", - ) - - # Mock the http request call within the method and fake a response. - with mock.patch.object(type(client.transport._session), "request") as req: - # Designate an appropriate value for the returned response. - return_value = gcs_external_system.ExternalSystem() + req.return_value = response_value - # get arguments that satisfy an http rule for this method - sample_request = { - "external_system": { - "name": "organizations/sample1/sources/sample2/findings/sample3/externalSystems/sample4" - } - } + response = client.update_finding(request) - # get truthy value for each flattened field - mock_args = dict( - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), - ) - mock_args.update(sample_request) + expected_params = [("$alt", "json;enum-encoding=int")] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Wrap the value into a proper Response obj - response_value = Response() - response_value.status_code = 200 - pb_return_value = gcs_external_system.ExternalSystem.pb(return_value) - json_return_value = json_format.MessageToJson(pb_return_value) - response_value._content = json_return_value.encode("UTF-8") - req.return_value = response_value - client.update_external_system(**mock_args) +def test_update_finding_rest_unset_required_fields(): + transport = transports.SecurityCenterRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) - # Establish that the underlying call was made with the expected - # request object values. - assert len(req.mock_calls) == 1 - _, args, _ = req.mock_calls[0] - assert path_template.validate( - "%s/v1/{external_system.name=organizations/*/sources/*/findings/*/externalSystems/*}" - % client.transport._host, - args[1], - ) + unset_fields = transport.update_finding._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("finding",))) -def test_update_external_system_rest_flattened_error(transport: str = "rest"): - client = SecurityCenterClient( +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_update_finding_rest_interceptors(null_interceptor): + transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), - transport=transport, + interceptor=None + if null_interceptor + else transports.SecurityCenterRestInterceptor(), ) - - # Attempting to call a method with both a request object and flattened - # fields is an error. - with pytest.raises(ValueError): - client.update_external_system( - securitycenter_service.UpdateExternalSystemRequest(), - external_system=gcs_external_system.ExternalSystem(name="name_value"), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), + client = SecurityCenterClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.SecurityCenterRestInterceptor, "post_update_finding" + ) as post, mock.patch.object( + transports.SecurityCenterRestInterceptor, "pre_update_finding" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = securitycenter_service.UpdateFindingRequest.pb( + securitycenter_service.UpdateFindingRequest() ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) + request = securitycenter_service.UpdateFindingRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_finding.Finding() -def test_update_external_system_rest_error(): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), transport="rest" - ) + client.update_finding( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + pre.assert_called_once() + post.assert_called_once() -@pytest.mark.parametrize( - "request_type", - [ - securitycenter_service.UpdateFindingRequest, - dict, - ], -) -def test_update_finding_rest(request_type): + +def test_update_finding_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.UpdateFindingRequest +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), - transport="rest", + transport=transport, ) # send a request that will satisfy transcoding @@ -19575,6 +25449,7 @@ def test_update_finding_rest(request_type): }, "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], "next_steps": "next_steps_value", + "module_name": "module_name_value", "containers": [ { "name": "name_value", @@ -19632,56 +25507,144 @@ def test_update_finding_rest(request_type): } request = request_type(**request_init) + # Mock the http request call within the method and fake a BadRequest error. + with mock.patch.object(Session, "request") as req, pytest.raises( + core_exceptions.BadRequest + ): + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 400 + response_value.request = Request() + req.return_value = response_value + client.update_finding(request) + + +def test_update_finding_rest_flattened(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.transport._session), "request") as req: + # Designate an appropriate value for the returned response. + return_value = gcs_finding.Finding() + + # get arguments that satisfy an http rule for this method + sample_request = { + "finding": { + "name": "organizations/sample1/sources/sample2/findings/sample3" + } + } + + # get truthy value for each flattened field + mock_args = dict( + finding=gcs_finding.Finding(name="name_value"), + ) + mock_args.update(sample_request) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = gcs_finding.Finding.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + client.update_finding(**mock_args) + + # Establish that the underlying call was made with the expected + # request object values. + assert len(req.mock_calls) == 1 + _, args, _ = req.mock_calls[0] + assert path_template.validate( + "%s/v1/{finding.name=organizations/*/sources/*/findings/*}" + % client.transport._host, + args[1], + ) + + +def test_update_finding_rest_flattened_error(transport: str = "rest"): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # Attempting to call a method with both a request object and flattened + # fields is an error. + with pytest.raises(ValueError): + client.update_finding( + securitycenter_service.UpdateFindingRequest(), + finding=gcs_finding.Finding(name="name_value"), + ) + + +def test_update_finding_rest_error(): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + securitycenter_service.UpdateMuteConfigRequest, + dict, + ], +) +def test_update_mute_config_rest(request_type): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + } + request_init["mute_config"] = { + "name": "organizations/sample1/muteConfigs/sample2", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", + } + request = request_type(**request_init) + # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding( + return_value = gcs_mute_config.MuteConfig( name="name_value", - parent="parent_value", - resource_name="resource_name_value", - state=gcs_finding.Finding.State.ACTIVE, - category="category_value", - external_uri="external_uri_value", - severity=gcs_finding.Finding.Severity.CRITICAL, - canonical_name="canonical_name_value", - mute=gcs_finding.Finding.Mute.MUTED, - finding_class=gcs_finding.Finding.FindingClass.THREAT, - mute_initiator="mute_initiator_value", - parent_display_name="parent_display_name_value", + display_name="display_name_value", description="description_value", - next_steps="next_steps_value", + filter="filter_value", + most_recent_editor="most_recent_editor_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_finding(request) + response = client.update_mute_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_finding.Finding) - assert response.name == "name_value" - assert response.parent == "parent_value" - assert response.resource_name == "resource_name_value" - assert response.state == gcs_finding.Finding.State.ACTIVE - assert response.category == "category_value" - assert response.external_uri == "external_uri_value" - assert response.severity == gcs_finding.Finding.Severity.CRITICAL - assert response.canonical_name == "canonical_name_value" - assert response.mute == gcs_finding.Finding.Mute.MUTED - assert response.finding_class == gcs_finding.Finding.FindingClass.THREAT - assert response.mute_initiator == "mute_initiator_value" - assert response.parent_display_name == "parent_display_name_value" + assert isinstance(response, gcs_mute_config.MuteConfig) + assert response.name == "name_value" + assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.next_steps == "next_steps_value" + assert response.filter == "filter_value" + assert response.most_recent_editor == "most_recent_editor_value" -def test_update_finding_rest_required_fields( - request_type=securitycenter_service.UpdateFindingRequest, +def test_update_mute_config_rest_required_fields( + request_type=securitycenter_service.UpdateMuteConfigRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -19700,14 +25663,14 @@ def test_update_finding_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_finding._get_unset_required_fields(jsonified_request) + ).update_mute_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_finding._get_unset_required_fields(jsonified_request) + ).update_mute_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -19721,7 +25684,7 @@ def test_update_finding_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = gcs_mute_config.MuteConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -19742,30 +25705,30 @@ def test_update_finding_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_finding(request) + response = client.update_mute_config(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_finding_rest_unset_required_fields(): +def test_update_mute_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_finding._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("finding",))) + unset_fields = transport.update_mute_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("muteConfig",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_finding_rest_interceptors(null_interceptor): +def test_update_mute_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -19778,14 +25741,14 @@ def test_update_finding_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_finding" + transports.SecurityCenterRestInterceptor, "post_update_mute_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_finding" + transports.SecurityCenterRestInterceptor, "pre_update_mute_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateFindingRequest.pb( - securitycenter_service.UpdateFindingRequest() + pb_message = securitycenter_service.UpdateMuteConfigRequest.pb( + securitycenter_service.UpdateMuteConfigRequest() ) transcode.return_value = { "method": "post", @@ -19797,225 +25760,50 @@ def test_update_finding_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_finding.Finding.to_json(gcs_finding.Finding()) - - request = securitycenter_service.UpdateFindingRequest() - metadata = [ - ("key", "val"), - ("cephalopod", "squid"), - ] - pre.return_value = request, metadata - post.return_value = gcs_finding.Finding() - - client.update_finding( - request, - metadata=[ - ("key", "val"), - ("cephalopod", "squid"), - ], - ) - - pre.assert_called_once() - post.assert_called_once() - - -def test_update_finding_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.UpdateFindingRequest -): - client = SecurityCenterClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - - # send a request that will satisfy transcoding - request_init = { - "finding": {"name": "organizations/sample1/sources/sample2/findings/sample3"} - } - request_init["finding"] = { - "name": "organizations/sample1/sources/sample2/findings/sample3", - "parent": "parent_value", - "resource_name": "resource_name_value", - "state": 1, - "category": "category_value", - "external_uri": "external_uri_value", - "source_properties": {}, - "security_marks": { - "name": "name_value", - "marks": {}, - "canonical_name": "canonical_name_value", - }, - "event_time": {"seconds": 751, "nanos": 543}, - "create_time": {}, - "severity": 1, - "canonical_name": "canonical_name_value", - "mute": 1, - "finding_class": 1, - "indicator": { - "ip_addresses": ["ip_addresses_value1", "ip_addresses_value2"], - "domains": ["domains_value1", "domains_value2"], - "signatures": [ - { - "memory_hash_signature": { - "binary_family": "binary_family_value", - "detections": [ - {"binary": "binary_value", "percent_pages_matched": 0.2197} - ], - }, - "yara_rule_signature": {"yara_rule": "yara_rule_value"}, - } - ], - "uris": ["uris_value1", "uris_value2"], - }, - "vulnerability": { - "cve": { - "id": "id_value", - "references": [{"source": "source_value", "uri": "uri_value"}], - "cvssv3": { - "base_score": 0.1046, - "attack_vector": 1, - "attack_complexity": 1, - "privileges_required": 1, - "user_interaction": 1, - "scope": 1, - "confidentiality_impact": 1, - "integrity_impact": 1, - "availability_impact": 1, - }, - "upstream_fix_available": True, - } - }, - "mute_update_time": {}, - "external_systems": {}, - "mitre_attack": { - "primary_tactic": 1, - "primary_techniques": [1], - "additional_tactics": [1], - "additional_techniques": [1], - "version": "version_value", - }, - "access": { - "principal_email": "principal_email_value", - "caller_ip": "caller_ip_value", - "caller_ip_geo": {"region_code": "region_code_value"}, - "user_agent_family": "user_agent_family_value", - "service_name": "service_name_value", - "method_name": "method_name_value", - "principal_subject": "principal_subject_value", - "service_account_key_name": "service_account_key_name_value", - "service_account_delegation_info": [ - { - "principal_email": "principal_email_value", - "principal_subject": "principal_subject_value", - } - ], - "user_name": "user_name_value", - }, - "connections": [ - { - "destination_ip": "destination_ip_value", - "destination_port": 1734, - "source_ip": "source_ip_value", - "source_port": 1205, - "protocol": 1, - } - ], - "mute_initiator": "mute_initiator_value", - "processes": [ - { - "name": "name_value", - "binary": { - "path": "path_value", - "size": 443, - "sha256": "sha256_value", - "hashed_size": 1159, - "partially_hashed": True, - "contents": "contents_value", - }, - "libraries": {}, - "script": {}, - "args": ["args_value1", "args_value2"], - "arguments_truncated": True, - "env_variables": [{"name": "name_value", "val": "val_value"}], - "env_variables_truncated": True, - "pid": 317, - "parent_pid": 1062, - } - ], - "contacts": {}, - "compliances": [ - { - "standard": "standard_value", - "version": "version_value", - "ids": ["ids_value1", "ids_value2"], - } - ], - "parent_display_name": "parent_display_name_value", - "description": "description_value", - "exfiltration": { - "sources": [ - { - "name": "name_value", - "components": ["components_value1", "components_value2"], - } - ], - "targets": {}, - }, - "iam_bindings": [{"action": 1, "role": "role_value", "member": "member_value"}], - "next_steps": "next_steps_value", - "containers": [ - { - "name": "name_value", - "uri": "uri_value", - "image_id": "image_id_value", - "labels": [{"name": "name_value", "value": "value_value"}], - } - ], - "kubernetes": { - "pods": [ - {"ns": "ns_value", "name": "name_value", "labels": {}, "containers": {}} - ], - "nodes": [{"name": "name_value"}], - "node_pools": [{"name": "name_value", "nodes": {}}], - "roles": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - "bindings": [ - { - "ns": "ns_value", - "name": "name_value", - "role": {}, - "subjects": [{"kind": 1, "ns": "ns_value", "name": "name_value"}], - } - ], - "access_reviews": [ - { - "group": "group_value", - "ns": "ns_value", - "name": "name_value", - "resource": "resource_value", - "subresource": "subresource_value", - "verb": "verb_value", - "version": "version_value", - } - ], - }, - "database": { - "name": "name_value", - "display_name": "display_name_value", - "user_name": "user_name_value", - "query": "query_value", - "grantees": ["grantees_value1", "grantees_value2"], - }, - "files": {}, - "kernel_rootkit": { - "name": "name_value", - "unexpected_code_modification": True, - "unexpected_read_only_data_modification": True, - "unexpected_ftrace_handler": True, - "unexpected_kprobe_handler": True, - "unexpected_kernel_code_pages": True, - "unexpected_system_call_handler": True, - "unexpected_interrupt_handler": True, - "unexpected_processes_in_runqueue": True, - }, + req.return_value._content = gcs_mute_config.MuteConfig.to_json( + gcs_mute_config.MuteConfig() + ) + + request = securitycenter_service.UpdateMuteConfigRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = gcs_mute_config.MuteConfig() + + client.update_mute_config( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_update_mute_config_rest_bad_request( + transport: str = "rest", request_type=securitycenter_service.UpdateMuteConfigRequest +): + client = SecurityCenterClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + } + request_init["mute_config"] = { + "name": "organizations/sample1/muteConfigs/sample2", + "display_name": "display_name_value", + "description": "description_value", + "filter": "filter_value", + "create_time": {"seconds": 751, "nanos": 543}, + "update_time": {}, + "most_recent_editor": "most_recent_editor_value", } request = request_type(**request_init) @@ -20028,10 +25816,10 @@ def test_update_finding_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_finding(request) + client.update_mute_config(request) -def test_update_finding_rest_flattened(): +def test_update_mute_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20040,43 +25828,42 @@ def test_update_finding_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_finding.Finding() + return_value = gcs_mute_config.MuteConfig() # get arguments that satisfy an http rule for this method sample_request = { - "finding": { - "name": "organizations/sample1/sources/sample2/findings/sample3" - } + "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} } # get truthy value for each flattened field mock_args = dict( - finding=gcs_finding.Finding(name="name_value"), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_finding.Finding.pb(return_value) + pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_finding(**mock_args) + client.update_mute_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{finding.name=organizations/*/sources/*/findings/*}" + "%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" % client.transport._host, args[1], ) -def test_update_finding_rest_flattened_error(transport: str = "rest"): +def test_update_mute_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20085,13 +25872,14 @@ def test_update_finding_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_finding( - securitycenter_service.UpdateFindingRequest(), - finding=gcs_finding.Finding(name="name_value"), + client.update_mute_config( + securitycenter_service.UpdateMuteConfigRequest(), + mute_config=gcs_mute_config.MuteConfig(name="name_value"), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_finding_rest_error(): +def test_update_mute_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20100,11 +25888,11 @@ def test_update_finding_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateMuteConfigRequest, + securitycenter_service.UpdateNotificationConfigRequest, dict, ], ) -def test_update_mute_config_rest(request_type): +def test_update_notification_config_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20112,51 +25900,52 @@ def test_update_mute_config_rest(request_type): # send a request that will satisfy transcoding request_init = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } - request_init["mute_config"] = { - "name": "organizations/sample1/muteConfigs/sample2", - "display_name": "display_name_value", + request_init["notification_config"] = { + "name": "organizations/sample1/notificationConfigs/sample2", "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig( + return_value = gcs_notification_config.NotificationConfig( name="name_value", - display_name="display_name_value", description="description_value", - filter="filter_value", - most_recent_editor="most_recent_editor_value", + pubsub_topic="pubsub_topic_value", + service_account="service_account_value", + streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( + filter="filter_value" + ), ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_mute_config(request) + response = client.update_notification_config(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_mute_config.MuteConfig) + assert isinstance(response, gcs_notification_config.NotificationConfig) assert response.name == "name_value" - assert response.display_name == "display_name_value" assert response.description == "description_value" - assert response.filter == "filter_value" - assert response.most_recent_editor == "most_recent_editor_value" + assert response.pubsub_topic == "pubsub_topic_value" + assert response.service_account == "service_account_value" -def test_update_mute_config_rest_required_fields( - request_type=securitycenter_service.UpdateMuteConfigRequest, +def test_update_notification_config_rest_required_fields( + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20175,14 +25964,14 @@ def test_update_mute_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_mute_config._get_unset_required_fields(jsonified_request) + ).update_notification_config._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_mute_config._get_unset_required_fields(jsonified_request) + ).update_notification_config._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20196,7 +25985,7 @@ def test_update_mute_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = gcs_notification_config.NotificationConfig() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20217,30 +26006,32 @@ def test_update_mute_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_mute_config(request) + response = client.update_notification_config(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_mute_config_rest_unset_required_fields(): +def test_update_notification_config_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_mute_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("muteConfig",))) + unset_fields = transport.update_notification_config._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("notificationConfig",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_mute_config_rest_interceptors(null_interceptor): +def test_update_notification_config_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20253,14 +26044,14 @@ def test_update_mute_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_mute_config" + transports.SecurityCenterRestInterceptor, "post_update_notification_config" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_mute_config" + transports.SecurityCenterRestInterceptor, "pre_update_notification_config" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateMuteConfigRequest.pb( - securitycenter_service.UpdateMuteConfigRequest() + pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb( + securitycenter_service.UpdateNotificationConfigRequest() ) transcode.return_value = { "method": "post", @@ -20272,19 +26063,19 @@ def test_update_mute_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_mute_config.MuteConfig.to_json( - gcs_mute_config.MuteConfig() + req.return_value._content = gcs_notification_config.NotificationConfig.to_json( + gcs_notification_config.NotificationConfig() ) - request = securitycenter_service.UpdateMuteConfigRequest() + request = securitycenter_service.UpdateNotificationConfigRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_mute_config.MuteConfig() + post.return_value = gcs_notification_config.NotificationConfig() - client.update_mute_config( + client.update_notification_config( request, metadata=[ ("key", "val"), @@ -20296,8 +26087,9 @@ def test_update_mute_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_mute_config_rest_bad_request( - transport: str = "rest", request_type=securitycenter_service.UpdateMuteConfigRequest +def test_update_notification_config_rest_bad_request( + transport: str = "rest", + request_type=securitycenter_service.UpdateNotificationConfigRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20306,16 +26098,16 @@ def test_update_mute_config_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } - request_init["mute_config"] = { - "name": "organizations/sample1/muteConfigs/sample2", - "display_name": "display_name_value", + request_init["notification_config"] = { + "name": "organizations/sample1/notificationConfigs/sample2", "description": "description_value", - "filter": "filter_value", - "create_time": {"seconds": 751, "nanos": 543}, - "update_time": {}, - "most_recent_editor": "most_recent_editor_value", + "pubsub_topic": "pubsub_topic_value", + "service_account": "service_account_value", + "streaming_config": {"filter": "filter_value"}, } request = request_type(**request_init) @@ -20328,10 +26120,10 @@ def test_update_mute_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_mute_config(request) + client.update_notification_config(request) -def test_update_mute_config_rest_flattened(): +def test_update_notification_config_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20340,16 +26132,20 @@ def test_update_mute_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_mute_config.MuteConfig() + return_value = gcs_notification_config.NotificationConfig() # get arguments that satisfy an http rule for this method sample_request = { - "mute_config": {"name": "organizations/sample1/muteConfigs/sample2"} + "notification_config": { + "name": "organizations/sample1/notificationConfigs/sample2" + } } # get truthy value for each flattened field mock_args = dict( - mute_config=gcs_mute_config.MuteConfig(name="name_value"), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) @@ -20357,25 +26153,25 @@ def test_update_mute_config_rest_flattened(): # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_mute_config.MuteConfig.pb(return_value) + pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_mute_config(**mock_args) + client.update_notification_config(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{mute_config.name=organizations/*/muteConfigs/*}" + "%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" % client.transport._host, args[1], ) -def test_update_mute_config_rest_flattened_error(transport: str = "rest"): +def test_update_notification_config_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20384,14 +26180,16 @@ def test_update_mute_config_rest_flattened_error(transport: str = "rest"): # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_mute_config( - securitycenter_service.UpdateMuteConfigRequest(), - mute_config=gcs_mute_config.MuteConfig(name="name_value"), + client.update_notification_config( + securitycenter_service.UpdateNotificationConfigRequest(), + notification_config=gcs_notification_config.NotificationConfig( + name="name_value" + ), update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_mute_config_rest_error(): +def test_update_notification_config_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20400,11 +26198,11 @@ def test_update_mute_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateNotificationConfigRequest, + securitycenter_service.UpdateOrganizationSettingsRequest, dict, ], ) -def test_update_notification_config_rest(request_type): +def test_update_organization_settings_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20412,52 +26210,47 @@ def test_update_notification_config_rest(request_type): # send a request that will satisfy transcoding request_init = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" - } + "organization_settings": {"name": "organizations/sample1/organizationSettings"} } - request_init["notification_config"] = { - "name": "organizations/sample1/notificationConfigs/sample2", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, + request_init["organization_settings"] = { + "name": "organizations/sample1/organizationSettings", + "enable_asset_discovery": True, + "asset_discovery_config": { + "project_ids": ["project_ids_value1", "project_ids_value2"], + "inclusion_mode": 1, + "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + }, } request = request_type(**request_init) # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig( + return_value = gcs_organization_settings.OrganizationSettings( name="name_value", - description="description_value", - pubsub_topic="pubsub_topic_value", - service_account="service_account_value", - streaming_config=gcs_notification_config.NotificationConfig.StreamingConfig( - filter="filter_value" - ), + enable_asset_discovery=True, ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_notification_config(request) + response = client.update_organization_settings(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_notification_config.NotificationConfig) + assert isinstance(response, gcs_organization_settings.OrganizationSettings) assert response.name == "name_value" - assert response.description == "description_value" - assert response.pubsub_topic == "pubsub_topic_value" - assert response.service_account == "service_account_value" + assert response.enable_asset_discovery is True -def test_update_notification_config_rest_required_fields( - request_type=securitycenter_service.UpdateNotificationConfigRequest, +def test_update_organization_settings_rest_required_fields( + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20476,14 +26269,14 @@ def test_update_notification_config_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_notification_config._get_unset_required_fields(jsonified_request) + ).update_organization_settings._get_unset_required_fields(jsonified_request) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_notification_config._get_unset_required_fields(jsonified_request) + ).update_organization_settings._get_unset_required_fields(jsonified_request) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20497,7 +26290,7 @@ def test_update_notification_config_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = gcs_organization_settings.OrganizationSettings() # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20518,7 +26311,7 @@ def test_update_notification_config_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb( + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -20526,24 +26319,24 @@ def test_update_notification_config_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_notification_config(request) + response = client.update_organization_settings(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_notification_config_rest_unset_required_fields(): +def test_update_organization_settings_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_notification_config._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("notificationConfig",))) + unset_fields = transport.update_organization_settings._get_unset_required_fields({}) + assert set(unset_fields) == (set(("updateMask",)) & set(("organizationSettings",))) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_notification_config_rest_interceptors(null_interceptor): +def test_update_organization_settings_rest_interceptors(null_interceptor): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20556,14 +26349,14 @@ def test_update_notification_config_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_notification_config" + transports.SecurityCenterRestInterceptor, "post_update_organization_settings" ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_notification_config" + transports.SecurityCenterRestInterceptor, "pre_update_organization_settings" ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateNotificationConfigRequest.pb( - securitycenter_service.UpdateNotificationConfigRequest() + pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb( + securitycenter_service.UpdateOrganizationSettingsRequest() ) transcode.return_value = { "method": "post", @@ -20575,19 +26368,21 @@ def test_update_notification_config_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = gcs_notification_config.NotificationConfig.to_json( - gcs_notification_config.NotificationConfig() + req.return_value._content = ( + gcs_organization_settings.OrganizationSettings.to_json( + gcs_organization_settings.OrganizationSettings() + ) ) - request = securitycenter_service.UpdateNotificationConfigRequest() + request = securitycenter_service.UpdateOrganizationSettingsRequest() metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_notification_config.NotificationConfig() + post.return_value = gcs_organization_settings.OrganizationSettings() - client.update_notification_config( + client.update_organization_settings( request, metadata=[ ("key", "val"), @@ -20599,9 +26394,9 @@ def test_update_notification_config_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_notification_config_rest_bad_request( +def test_update_organization_settings_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.UpdateNotificationConfigRequest, + request_type=securitycenter_service.UpdateOrganizationSettingsRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20610,16 +26405,16 @@ def test_update_notification_config_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" - } + "organization_settings": {"name": "organizations/sample1/organizationSettings"} } - request_init["notification_config"] = { - "name": "organizations/sample1/notificationConfigs/sample2", - "description": "description_value", - "pubsub_topic": "pubsub_topic_value", - "service_account": "service_account_value", - "streaming_config": {"filter": "filter_value"}, + request_init["organization_settings"] = { + "name": "organizations/sample1/organizationSettings", + "enable_asset_discovery": True, + "asset_discovery_config": { + "project_ids": ["project_ids_value1", "project_ids_value2"], + "inclusion_mode": 1, + "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + }, } request = request_type(**request_init) @@ -20632,10 +26427,10 @@ def test_update_notification_config_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_notification_config(request) + client.update_organization_settings(request) -def test_update_notification_config_rest_flattened(): +def test_update_organization_settings_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20644,46 +26439,47 @@ def test_update_notification_config_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_notification_config.NotificationConfig() + return_value = gcs_organization_settings.OrganizationSettings() # get arguments that satisfy an http rule for this method sample_request = { - "notification_config": { - "name": "organizations/sample1/notificationConfigs/sample2" + "organization_settings": { + "name": "organizations/sample1/organizationSettings" } } # get truthy value for each flattened field mock_args = dict( - notification_config=gcs_notification_config.NotificationConfig( + organization_settings=gcs_organization_settings.OrganizationSettings( name="name_value" ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_notification_config.NotificationConfig.pb(return_value) + pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + return_value + ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_notification_config(**mock_args) + client.update_organization_settings(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{notification_config.name=organizations/*/notificationConfigs/*}" + "%s/v1/{organization_settings.name=organizations/*/organizationSettings}" % client.transport._host, args[1], ) -def test_update_notification_config_rest_flattened_error(transport: str = "rest"): +def test_update_organization_settings_rest_flattened_error(transport: str = "rest"): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -20692,16 +26488,15 @@ def test_update_notification_config_rest_flattened_error(transport: str = "rest" # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_notification_config( - securitycenter_service.UpdateNotificationConfigRequest(), - notification_config=gcs_notification_config.NotificationConfig( + client.update_organization_settings( + securitycenter_service.UpdateOrganizationSettingsRequest(), + organization_settings=gcs_organization_settings.OrganizationSettings( name="name_value" ), - update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_notification_config_rest_error(): +def test_update_organization_settings_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -20710,11 +26505,11 @@ def test_update_notification_config_rest_error(): @pytest.mark.parametrize( "request_type", [ - securitycenter_service.UpdateOrganizationSettingsRequest, + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, dict, ], ) -def test_update_organization_settings_rest(request_type): +def test_update_security_health_analytics_custom_module_rest(request_type): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20722,15 +26517,33 @@ def test_update_organization_settings_rest(request_type): # send a request that will satisfy transcoding request_init = { - "organization_settings": {"name": "organizations/sample1/organizationSettings"} + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } } - request_init["organization_settings"] = { - "name": "organizations/sample1/organizationSettings", - "enable_asset_discovery": True, - "asset_discovery_config": { - "project_ids": ["project_ids_value1", "project_ids_value2"], - "inclusion_mode": 1, - "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + request_init["security_health_analytics_custom_module"] = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", }, } request = request_type(**request_init) @@ -20738,31 +26551,43 @@ def test_update_organization_settings_rest(request_type): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings( + return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value", - enable_asset_discovery=True, + display_name="display_name_value", + enablement_state=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED, + last_editor="last_editor_value", + ancestor_module="ancestor_module_value", ) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_organization_settings(request) + response = client.update_security_health_analytics_custom_module(request) # Establish that the response is the type that we expect. - assert isinstance(response, gcs_organization_settings.OrganizationSettings) + assert isinstance( + response, + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule, + ) assert response.name == "name_value" - assert response.enable_asset_discovery is True + assert response.display_name == "display_name_value" + assert ( + response.enablement_state + == gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.EnablementState.ENABLED + ) + assert response.last_editor == "last_editor_value" + assert response.ancestor_module == "ancestor_module_value" -def test_update_organization_settings_rest_required_fields( - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, +def test_update_security_health_analytics_custom_module_rest_required_fields( + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): transport_class = transports.SecurityCenterRestTransport @@ -20781,14 +26606,18 @@ def test_update_organization_settings_rest_required_fields( unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_organization_settings._get_unset_required_fields(jsonified_request) + ).update_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) jsonified_request.update(unset_fields) # verify required fields with default values are now present unset_fields = transport_class( credentials=ga_credentials.AnonymousCredentials() - ).update_organization_settings._get_unset_required_fields(jsonified_request) + ).update_security_health_analytics_custom_module._get_unset_required_fields( + jsonified_request + ) # Check that path parameters and body parameters are not mixing in. assert not set(unset_fields) - set(("update_mask",)) jsonified_request.update(unset_fields) @@ -20802,7 +26631,9 @@ def test_update_organization_settings_rest_required_fields( request = request_type(**request_init) # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # Mock the http request call within the method and fake a response. with mock.patch.object(Session, "request") as req: # We need to mock transcode() because providing default values @@ -20823,7 +26654,7 @@ def test_update_organization_settings_rest_required_fields( response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) @@ -20831,24 +26662,30 @@ def test_update_organization_settings_rest_required_fields( response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - response = client.update_organization_settings(request) + response = client.update_security_health_analytics_custom_module(request) expected_params = [("$alt", "json;enum-encoding=int")] actual_params = req.call_args.kwargs["params"] assert expected_params == actual_params -def test_update_organization_settings_rest_unset_required_fields(): +def test_update_security_health_analytics_custom_module_rest_unset_required_fields(): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials ) - unset_fields = transport.update_organization_settings._get_unset_required_fields({}) - assert set(unset_fields) == (set(("updateMask",)) & set(("organizationSettings",))) + unset_fields = transport.update_security_health_analytics_custom_module._get_unset_required_fields( + {} + ) + assert set(unset_fields) == ( + set(("updateMask",)) & set(("securityHealthAnalyticsCustomModule",)) + ) @pytest.mark.parametrize("null_interceptor", [True, False]) -def test_update_organization_settings_rest_interceptors(null_interceptor): +def test_update_security_health_analytics_custom_module_rest_interceptors( + null_interceptor, +): transport = transports.SecurityCenterRestTransport( credentials=ga_credentials.AnonymousCredentials(), interceptor=None @@ -20861,14 +26698,16 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): ) as req, mock.patch.object( path_template, "transcode" ) as transcode, mock.patch.object( - transports.SecurityCenterRestInterceptor, "post_update_organization_settings" + transports.SecurityCenterRestInterceptor, + "post_update_security_health_analytics_custom_module", ) as post, mock.patch.object( - transports.SecurityCenterRestInterceptor, "pre_update_organization_settings" + transports.SecurityCenterRestInterceptor, + "pre_update_security_health_analytics_custom_module", ) as pre: pre.assert_not_called() post.assert_not_called() - pb_message = securitycenter_service.UpdateOrganizationSettingsRequest.pb( - securitycenter_service.UpdateOrganizationSettingsRequest() + pb_message = securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest.pb( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() ) transcode.return_value = { "method": "post", @@ -20880,21 +26719,23 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): req.return_value = Response() req.return_value.status_code = 200 req.return_value.request = PreparedRequest() - req.return_value._content = ( - gcs_organization_settings.OrganizationSettings.to_json( - gcs_organization_settings.OrganizationSettings() - ) + req.return_value._content = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.to_json( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() ) - request = securitycenter_service.UpdateOrganizationSettingsRequest() + request = ( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest() + ) metadata = [ ("key", "val"), ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = gcs_organization_settings.OrganizationSettings() + post.return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) - client.update_organization_settings( + client.update_security_health_analytics_custom_module( request, metadata=[ ("key", "val"), @@ -20906,9 +26747,9 @@ def test_update_organization_settings_rest_interceptors(null_interceptor): post.assert_called_once() -def test_update_organization_settings_rest_bad_request( +def test_update_security_health_analytics_custom_module_rest_bad_request( transport: str = "rest", - request_type=securitycenter_service.UpdateOrganizationSettingsRequest, + request_type=securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest, ): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), @@ -20917,15 +26758,33 @@ def test_update_organization_settings_rest_bad_request( # send a request that will satisfy transcoding request_init = { - "organization_settings": {"name": "organizations/sample1/organizationSettings"} + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" + } } - request_init["organization_settings"] = { - "name": "organizations/sample1/organizationSettings", - "enable_asset_discovery": True, - "asset_discovery_config": { - "project_ids": ["project_ids_value1", "project_ids_value2"], - "inclusion_mode": 1, - "folder_ids": ["folder_ids_value1", "folder_ids_value2"], + request_init["security_health_analytics_custom_module"] = { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2", + "display_name": "display_name_value", + "enablement_state": 1, + "update_time": {"seconds": 751, "nanos": 543}, + "last_editor": "last_editor_value", + "ancestor_module": "ancestor_module_value", + "custom_config": { + "predicate": { + "expression": "expression_value", + "title": "title_value", + "description": "description_value", + "location": "location_value", + }, + "custom_output": { + "properties": [{"name": "name_value", "value_expression": {}}] + }, + "resource_selector": { + "resource_types": ["resource_types_value1", "resource_types_value2"] + }, + "severity": 1, + "description": "description_value", + "recommendation": "recommendation_value", }, } request = request_type(**request_init) @@ -20939,10 +26798,10 @@ def test_update_organization_settings_rest_bad_request( response_value.status_code = 400 response_value.request = Request() req.return_value = response_value - client.update_organization_settings(request) + client.update_security_health_analytics_custom_module(request) -def test_update_organization_settings_rest_flattened(): +def test_update_security_health_analytics_custom_module_rest_flattened(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest", @@ -20951,47 +26810,52 @@ def test_update_organization_settings_rest_flattened(): # Mock the http request call within the method and fake a response. with mock.patch.object(type(client.transport._session), "request") as req: # Designate an appropriate value for the returned response. - return_value = gcs_organization_settings.OrganizationSettings() + return_value = ( + gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule() + ) # get arguments that satisfy an http rule for this method sample_request = { - "organization_settings": { - "name": "organizations/sample1/organizationSettings" + "security_health_analytics_custom_module": { + "name": "organizations/sample1/securityHealthAnalyticsSettings/customModules/sample2" } } # get truthy value for each flattened field mock_args = dict( - organization_settings=gcs_organization_settings.OrganizationSettings( + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value" ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) mock_args.update(sample_request) # Wrap the value into a proper Response obj response_value = Response() response_value.status_code = 200 - pb_return_value = gcs_organization_settings.OrganizationSettings.pb( + pb_return_value = gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule.pb( return_value ) json_return_value = json_format.MessageToJson(pb_return_value) response_value._content = json_return_value.encode("UTF-8") req.return_value = response_value - client.update_organization_settings(**mock_args) + client.update_security_health_analytics_custom_module(**mock_args) # Establish that the underlying call was made with the expected # request object values. assert len(req.mock_calls) == 1 _, args, _ = req.mock_calls[0] assert path_template.validate( - "%s/v1/{organization_settings.name=organizations/*/organizationSettings}" + "%s/v1/{security_health_analytics_custom_module.name=organizations/*/securityHealthAnalyticsSettings/customModules/*}" % client.transport._host, args[1], ) -def test_update_organization_settings_rest_flattened_error(transport: str = "rest"): +def test_update_security_health_analytics_custom_module_rest_flattened_error( + transport: str = "rest", +): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport=transport, @@ -21000,15 +26864,16 @@ def test_update_organization_settings_rest_flattened_error(transport: str = "res # Attempting to call a method with both a request object and flattened # fields is an error. with pytest.raises(ValueError): - client.update_organization_settings( - securitycenter_service.UpdateOrganizationSettingsRequest(), - organization_settings=gcs_organization_settings.OrganizationSettings( + client.update_security_health_analytics_custom_module( + securitycenter_service.UpdateSecurityHealthAnalyticsCustomModuleRequest(), + security_health_analytics_custom_module=gcs_security_health_analytics_custom_module.SecurityHealthAnalyticsCustomModule( name="name_value" ), + update_mask=field_mask_pb2.FieldMask(paths=["paths_value"]), ) -def test_update_organization_settings_rest_error(): +def test_update_security_health_analytics_custom_module_rest_error(): client = SecurityCenterClient( credentials=ga_credentials.AnonymousCredentials(), transport="rest" ) @@ -22971,24 +28836,31 @@ def test_security_center_base_transport(): # raise NotImplementedError. methods = ( "bulk_mute_findings", + "create_security_health_analytics_custom_module", "create_source", "create_finding", "create_mute_config", "create_notification_config", "delete_mute_config", "delete_notification_config", + "delete_security_health_analytics_custom_module", "get_big_query_export", "get_iam_policy", "get_mute_config", "get_notification_config", "get_organization_settings", + "get_effective_security_health_analytics_custom_module", + "get_security_health_analytics_custom_module", "get_source", "group_assets", "group_findings", "list_assets", + "list_descendant_security_health_analytics_custom_modules", "list_findings", "list_mute_configs", "list_notification_configs", + "list_effective_security_health_analytics_custom_modules", + "list_security_health_analytics_custom_modules", "list_sources", "run_asset_discovery", "set_finding_state", @@ -23000,6 +28872,7 @@ def test_security_center_base_transport(): "update_mute_config", "update_notification_config", "update_organization_settings", + "update_security_health_analytics_custom_module", "update_source", "update_security_marks", "create_big_query_export", @@ -23293,6 +29166,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.bulk_mute_findings._session session2 = client2.transport.bulk_mute_findings._session assert session1 != session2 + session1 = client1.transport.create_security_health_analytics_custom_module._session + session2 = client2.transport.create_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.create_source._session session2 = client2.transport.create_source._session assert session1 != session2 @@ -23311,6 +29187,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.delete_notification_config._session session2 = client2.transport.delete_notification_config._session assert session1 != session2 + session1 = client1.transport.delete_security_health_analytics_custom_module._session + session2 = client2.transport.delete_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.get_big_query_export._session session2 = client2.transport.get_big_query_export._session assert session1 != session2 @@ -23326,6 +29205,16 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.get_organization_settings._session session2 = client2.transport.get_organization_settings._session assert session1 != session2 + session1 = ( + client1.transport.get_effective_security_health_analytics_custom_module._session + ) + session2 = ( + client2.transport.get_effective_security_health_analytics_custom_module._session + ) + assert session1 != session2 + session1 = client1.transport.get_security_health_analytics_custom_module._session + session2 = client2.transport.get_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.get_source._session session2 = client2.transport.get_source._session assert session1 != session2 @@ -23338,6 +29227,13 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.list_assets._session session2 = client2.transport.list_assets._session assert session1 != session2 + session1 = ( + client1.transport.list_descendant_security_health_analytics_custom_modules._session + ) + session2 = ( + client2.transport.list_descendant_security_health_analytics_custom_modules._session + ) + assert session1 != session2 session1 = client1.transport.list_findings._session session2 = client2.transport.list_findings._session assert session1 != session2 @@ -23347,6 +29243,16 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.list_notification_configs._session session2 = client2.transport.list_notification_configs._session assert session1 != session2 + session1 = ( + client1.transport.list_effective_security_health_analytics_custom_modules._session + ) + session2 = ( + client2.transport.list_effective_security_health_analytics_custom_modules._session + ) + assert session1 != session2 + session1 = client1.transport.list_security_health_analytics_custom_modules._session + session2 = client2.transport.list_security_health_analytics_custom_modules._session + assert session1 != session2 session1 = client1.transport.list_sources._session session2 = client2.transport.list_sources._session assert session1 != session2 @@ -23380,6 +29286,9 @@ def test_security_center_client_transport_session_collision(transport_name): session1 = client1.transport.update_organization_settings._session session2 = client2.transport.update_organization_settings._session assert session1 != session2 + session1 = client1.transport.update_security_health_analytics_custom_module._session + session2 = client2.transport.update_security_health_analytics_custom_module._session + assert session1 != session2 session1 = client1.transport.update_source._session session2 = client2.transport.update_source._session assert session1 != session2 @@ -23606,11 +29515,42 @@ def test_parse_big_query_export_path(): assert expected == actual -def test_external_system_path(): +def test_effective_security_health_analytics_custom_module_path(): organization = "winkle" - source = "nautilus" - finding = "scallop" - externalsystem = "abalone" + effective_custom_module = "nautilus" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/effectiveCustomModules/{effective_custom_module}".format( + organization=organization, + effective_custom_module=effective_custom_module, + ) + actual = ( + SecurityCenterClient.effective_security_health_analytics_custom_module_path( + organization, effective_custom_module + ) + ) + assert expected == actual + + +def test_parse_effective_security_health_analytics_custom_module_path(): + expected = { + "organization": "scallop", + "effective_custom_module": "abalone", + } + path = SecurityCenterClient.effective_security_health_analytics_custom_module_path( + **expected + ) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_effective_security_health_analytics_custom_module_path( + path + ) + assert expected == actual + + +def test_external_system_path(): + organization = "squid" + source = "clam" + finding = "whelk" + externalsystem = "octopus" expected = "organizations/{organization}/sources/{source}/findings/{finding}/externalSystems/{externalsystem}".format( organization=organization, source=source, @@ -23625,10 +29565,10 @@ def test_external_system_path(): def test_parse_external_system_path(): expected = { - "organization": "squid", - "source": "clam", - "finding": "whelk", - "externalsystem": "octopus", + "organization": "oyster", + "source": "nudibranch", + "finding": "cuttlefish", + "externalsystem": "mussel", } path = SecurityCenterClient.external_system_path(**expected) @@ -23638,9 +29578,9 @@ def test_parse_external_system_path(): def test_finding_path(): - organization = "oyster" - source = "nudibranch" - finding = "cuttlefish" + organization = "winkle" + source = "nautilus" + finding = "scallop" expected = ( "organizations/{organization}/sources/{source}/findings/{finding}".format( organization=organization, @@ -23654,9 +29594,9 @@ def test_finding_path(): def test_parse_finding_path(): expected = { - "organization": "mussel", - "source": "winkle", - "finding": "nautilus", + "organization": "abalone", + "source": "squid", + "finding": "clam", } path = SecurityCenterClient.finding_path(**expected) @@ -23666,8 +29606,8 @@ def test_parse_finding_path(): def test_mute_config_path(): - organization = "scallop" - mute_config = "abalone" + organization = "whelk" + mute_config = "octopus" expected = "organizations/{organization}/muteConfigs/{mute_config}".format( organization=organization, mute_config=mute_config, @@ -23678,8 +29618,8 @@ def test_mute_config_path(): def test_parse_mute_config_path(): expected = { - "organization": "squid", - "mute_config": "clam", + "organization": "oyster", + "mute_config": "nudibranch", } path = SecurityCenterClient.mute_config_path(**expected) @@ -23689,8 +29629,8 @@ def test_parse_mute_config_path(): def test_notification_config_path(): - organization = "whelk" - notification_config = "octopus" + organization = "cuttlefish" + notification_config = "mussel" expected = ( "organizations/{organization}/notificationConfigs/{notification_config}".format( organization=organization, @@ -23705,8 +29645,8 @@ def test_notification_config_path(): def test_parse_notification_config_path(): expected = { - "organization": "oyster", - "notification_config": "nudibranch", + "organization": "winkle", + "notification_config": "nautilus", } path = SecurityCenterClient.notification_config_path(**expected) @@ -23716,7 +29656,7 @@ def test_parse_notification_config_path(): def test_organization_settings_path(): - organization = "cuttlefish" + organization = "scallop" expected = "organizations/{organization}/organizationSettings".format( organization=organization, ) @@ -23726,7 +29666,7 @@ def test_organization_settings_path(): def test_parse_organization_settings_path(): expected = { - "organization": "mussel", + "organization": "abalone", } path = SecurityCenterClient.organization_settings_path(**expected) @@ -23735,9 +29675,36 @@ def test_parse_organization_settings_path(): assert expected == actual +def test_security_health_analytics_custom_module_path(): + organization = "squid" + custom_module = "clam" + expected = "organizations/{organization}/securityHealthAnalyticsSettings/customModules/{custom_module}".format( + organization=organization, + custom_module=custom_module, + ) + actual = SecurityCenterClient.security_health_analytics_custom_module_path( + organization, custom_module + ) + assert expected == actual + + +def test_parse_security_health_analytics_custom_module_path(): + expected = { + "organization": "whelk", + "custom_module": "octopus", + } + path = SecurityCenterClient.security_health_analytics_custom_module_path(**expected) + + # Check that the path construction is reversible. + actual = SecurityCenterClient.parse_security_health_analytics_custom_module_path( + path + ) + assert expected == actual + + def test_security_marks_path(): - organization = "winkle" - asset = "nautilus" + organization = "oyster" + asset = "nudibranch" expected = "organizations/{organization}/assets/{asset}/securityMarks".format( organization=organization, asset=asset, @@ -23748,8 +29715,8 @@ def test_security_marks_path(): def test_parse_security_marks_path(): expected = { - "organization": "scallop", - "asset": "abalone", + "organization": "cuttlefish", + "asset": "mussel", } path = SecurityCenterClient.security_marks_path(**expected) @@ -23759,8 +29726,8 @@ def test_parse_security_marks_path(): def test_source_path(): - organization = "squid" - source = "clam" + organization = "winkle" + source = "nautilus" expected = "organizations/{organization}/sources/{source}".format( organization=organization, source=source, @@ -23771,8 +29738,8 @@ def test_source_path(): def test_parse_source_path(): expected = { - "organization": "whelk", - "source": "octopus", + "organization": "scallop", + "source": "abalone", } path = SecurityCenterClient.source_path(**expected) @@ -23782,8 +29749,8 @@ def test_parse_source_path(): def test_topic_path(): - project = "oyster" - topic = "nudibranch" + project = "squid" + topic = "clam" expected = "projects/{project}/topics/{topic}".format( project=project, topic=topic, @@ -23794,8 +29761,8 @@ def test_topic_path(): def test_parse_topic_path(): expected = { - "project": "cuttlefish", - "topic": "mussel", + "project": "whelk", + "topic": "octopus", } path = SecurityCenterClient.topic_path(**expected) @@ -23805,7 +29772,7 @@ def test_parse_topic_path(): def test_common_billing_account_path(): - billing_account = "winkle" + billing_account = "oyster" expected = "billingAccounts/{billing_account}".format( billing_account=billing_account, ) @@ -23815,7 +29782,7 @@ def test_common_billing_account_path(): def test_parse_common_billing_account_path(): expected = { - "billing_account": "nautilus", + "billing_account": "nudibranch", } path = SecurityCenterClient.common_billing_account_path(**expected) @@ -23825,7 +29792,7 @@ def test_parse_common_billing_account_path(): def test_common_folder_path(): - folder = "scallop" + folder = "cuttlefish" expected = "folders/{folder}".format( folder=folder, ) @@ -23835,7 +29802,7 @@ def test_common_folder_path(): def test_parse_common_folder_path(): expected = { - "folder": "abalone", + "folder": "mussel", } path = SecurityCenterClient.common_folder_path(**expected) @@ -23845,7 +29812,7 @@ def test_parse_common_folder_path(): def test_common_organization_path(): - organization = "squid" + organization = "winkle" expected = "organizations/{organization}".format( organization=organization, ) @@ -23855,7 +29822,7 @@ def test_common_organization_path(): def test_parse_common_organization_path(): expected = { - "organization": "clam", + "organization": "nautilus", } path = SecurityCenterClient.common_organization_path(**expected) @@ -23865,7 +29832,7 @@ def test_parse_common_organization_path(): def test_common_project_path(): - project = "whelk" + project = "scallop" expected = "projects/{project}".format( project=project, ) @@ -23875,7 +29842,7 @@ def test_common_project_path(): def test_parse_common_project_path(): expected = { - "project": "octopus", + "project": "abalone", } path = SecurityCenterClient.common_project_path(**expected) @@ -23885,8 +29852,8 @@ def test_parse_common_project_path(): def test_common_location_path(): - project = "oyster" - location = "nudibranch" + project = "squid" + location = "clam" expected = "projects/{project}/locations/{location}".format( project=project, location=location, @@ -23897,8 +29864,8 @@ def test_common_location_path(): def test_parse_common_location_path(): expected = { - "project": "cuttlefish", - "location": "mussel", + "project": "whelk", + "location": "octopus", } path = SecurityCenterClient.common_location_path(**expected)